From bbb2193d745b72ee39179b253aa7444255c68004 Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Fri, 24 Jan 2025 20:10:28 +0200 Subject: [PATCH] Sonar Fix (#2239) Signed-off-by: Avgustin Marinov --- .../rest/resource/util/SortUtilityTest.java | 15 ++-- .../builder/SoftwareModuleCreate.java | 6 +- .../TargetAssignDistributionSetEvent.java | 4 +- .../StorageQuotaExceededException.java | 2 + .../model/SystemUsageReportWithTenants.java | 3 + .../hawkbit/repository/jpa/Statistics.java | 1 - .../RepositoryApplicationConfiguration.java | 4 +- .../SystemManagementCacheKeyGenerator.java | 7 +- .../jpa/model/TargetMetadataCompositeKey.java | 1 - .../SoftwareModuleSpecification.java | 15 ++-- .../jpa/specifications/TagSpecification.java | 5 +- .../specifications/TargetSpecifications.java | 67 +++++++--------- .../repository/jpa/utils/StatisticsUtils.java | 1 + .../event/remote/entity/TargetEventTest.java | 6 +- .../remote/entity/TargetTagEventTest.java | 6 +- .../SoftwareManagementSecurityTest.java | 2 +- .../SoftwareModuleManagementTest.java | 59 +++++++------- ...twareModuleTypeManagementSecurityTest.java | 2 +- .../SoftwareModuleTypeManagementTest.java | 80 ++++++++----------- .../SystemManagementSecurityTest.java | 2 +- .../jpa/management/SystemManagementTest.java | 4 +- ...rgetFilterQueryManagementSecurityTest.java | 2 +- .../TargetFilterQueryManagementTest.java | 54 ++++++------- .../TargetManagementSearchTest.java | 23 +++--- .../TargetManagementSecurityTest.java | 2 +- .../jpa/management/TargetManagementTest.java | 13 ++- .../TargetTagManagementSecurityTest.java | 2 +- .../management/TargetTagManagementTest.java | 35 ++++---- .../SpecificationsBuilderTest.java | 10 +-- .../test/util/SecurityContextSwitch.java | 1 + .../hawkbit/im/authentication/SpRole.java | 2 +- .../StaticAuthenticationProvider.java | 4 +- .../security/SecurityContextSerializer.java | 7 +- .../security/SpringSecurityAuditorAware.java | 8 +- .../im/authentication/SpPermissionTest.java | 7 +- .../ui/simple/view/util/SelectionGrid.java | 3 +- .../ui/simple/view/util/TableView.java | 1 + 37 files changed, 227 insertions(+), 239 deletions(-) diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/util/SortUtilityTest.java b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/util/SortUtilityTest.java index 15d8c986c0..46b5ce953c 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/util/SortUtilityTest.java +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/util/SortUtilityTest.java @@ -26,7 +26,7 @@ @Feature("Component Tests - Management API") @Story("Sorting parameter") -public class SortUtilityTest { +class SortUtilityTest { private static final String SORT_PARAM_1 = "NAME:ASC"; private static final String SORT_PARAM_2 = "NAME:ASC, DESCRIPTION:DESC"; @@ -38,42 +38,43 @@ public class SortUtilityTest { @Test @Description("Ascending sorting based on name.") - public void parseSortParam1() { + void parseSortParam1() { final List parse = SortUtility.parse(TargetFields.class, SORT_PARAM_1); assertThat(parse).as("Count of parsing parameter").hasSize(1); } @Test @Description("Ascending sorting based on name and descending sorting based on description.") - public void parseSortParam2() { + void parseSortParam2() { final List parse = SortUtility.parse(TargetFields.class, SORT_PARAM_2); assertThat(parse).as("Count of parsing parameter").hasSize(2); } @Test @Description("Sorting with wrong syntax leads to SortParameterSyntaxErrorException.") - public void parseWrongSyntaxParam() { + void parseWrongSyntaxParam() { assertThrows(SortParameterSyntaxErrorException.class, () -> SortUtility.parse(TargetFields.class, SYNTAX_FAILURE_SORT_PARAM)); } @Test @Description("Sorting based on name with case sensitive is possible.") - public void parsingIsNotCaseSensitive() { + @SuppressWarnings("squid:S2699") // assert no error + void parsingIsNotCaseSensitive() { SortUtility.parse(TargetFields.class, CASE_INSENSITIVE_DIRECTION_PARAM); SortUtility.parse(TargetFields.class, CASE_INSENSITIVE_DIRECTION_PARAM_1); } @Test @Description("Sorting with unknown direction order leads to SortParameterUnsupportedDirectionException.") - public void parseWrongDirectionParam() { + void parseWrongDirectionParam() { assertThrows(SortParameterUnsupportedDirectionException.class, () -> SortUtility.parse(TargetFields.class, WRONG_DIRECTION_PARAM)); } @Test @Description("Sorting with unknown field leads to SortParameterUnsupportedFieldException.") - public void parseWrongFieldParam() { + void parseWrongFieldParam() { assertThrows(SortParameterUnsupportedFieldException.class, () -> SortUtility.parse(TargetFields.class, WRONG_FIELD_PARAM)); } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/SoftwareModuleCreate.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/SoftwareModuleCreate.java index b4df96f763..b9621b19c5 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/SoftwareModuleCreate.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/SoftwareModuleCreate.java @@ -9,8 +9,6 @@ */ package org.eclipse.hawkbit.repository.builder; -import java.util.Optional; - import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; @@ -62,8 +60,8 @@ public interface SoftwareModuleCreate { * @param type for {@link SoftwareModule#getType()} * @return updated builder instance */ - default SoftwareModuleCreate type(final SoftwareModuleType type) { - return type(Optional.ofNullable(type).map(SoftwareModuleType::getKey).orElse(null)); + default SoftwareModuleCreate type(@NotNull final SoftwareModuleType type) { + return type(type.getKey()); } /** diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetAssignDistributionSetEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetAssignDistributionSetEvent.java index 1546656056..84184a680d 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetAssignDistributionSetEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetAssignDistributionSetEvent.java @@ -12,7 +12,6 @@ import java.io.Serial; import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -47,8 +46,7 @@ public class TargetAssignDistributionSetEvent extends AbstractAssignmentEvent { public TargetAssignDistributionSetEvent(final String tenant, final long distributionSetId, final List a, final String applicationId, final boolean maintenanceWindowAvailable) { super(distributionSetId, tenant, - a.stream().filter(action -> action.getDistributionSet().getId().longValue() == distributionSetId) - .collect(Collectors.toList()), + a.stream().filter(action -> action.getDistributionSet().getId().longValue() == distributionSetId).toList(), applicationId); this.distributionSetId = distributionSetId; this.maintenanceWindowAvailable = maintenanceWindowAvailable; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/StorageQuotaExceededException.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/StorageQuotaExceededException.java index e475bd9421..7a8a9c8ca2 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/StorageQuotaExceededException.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/exception/StorageQuotaExceededException.java @@ -11,12 +11,14 @@ import static org.eclipse.hawkbit.repository.SizeConversionHelper.byteValueToReadableString; +import lombok.EqualsAndHashCode; import org.eclipse.hawkbit.exception.AbstractServerRtException; import org.eclipse.hawkbit.exception.SpServerError; /** * Thrown if storage quota is exceeded */ +@EqualsAndHashCode(callSuper = true) public class StorageQuotaExceededException extends AbstractServerRtException { private static final String MAX_ARTIFACT_SIZE_TOTAL_EXCEEDED = "Storage quota exceeded, %s left."; diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SystemUsageReportWithTenants.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SystemUsageReportWithTenants.java index 99c6170099..f8b2822794 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SystemUsageReportWithTenants.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SystemUsageReportWithTenants.java @@ -13,9 +13,12 @@ import java.util.Collections; import java.util.List; +import lombok.EqualsAndHashCode; + /** * Bean for holding the system usage stats including tenant specific data. */ +@EqualsAndHashCode(callSuper = true) public class SystemUsageReportWithTenants extends SystemUsageReport { private final List tenants = new ArrayList<>(); diff --git a/hawkbit-repository/hawkbit-repository-jpa-hibernate/src/main/java/org/eclipse/hawkbit/repository/jpa/Statistics.java b/hawkbit-repository/hawkbit-repository-jpa-hibernate/src/main/java/org/eclipse/hawkbit/repository/jpa/Statistics.java index 1931e81bb3..3a8018c91b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa-hibernate/src/main/java/org/eclipse/hawkbit/repository/jpa/Statistics.java +++ b/hawkbit-repository/hawkbit-repository-jpa-hibernate/src/main/java/org/eclipse/hawkbit/repository/jpa/Statistics.java @@ -13,7 +13,6 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RepositoryApplicationConfiguration.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RepositoryApplicationConfiguration.java index 6b341e5c0e..03646054ec 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RepositoryApplicationConfiguration.java @@ -306,8 +306,8 @@ RolloutGroupEvaluationManager evaluationManager( @Bean @ConditionalOnMissingBean - SystemManagementCacheKeyGenerator systemManagementCacheKeyGenerator() { - return new SystemManagementCacheKeyGenerator(); + SystemManagementCacheKeyGenerator systemManagementCacheKeyGenerator(final TenantAware tenantAware) { + return new SystemManagementCacheKeyGenerator(tenantAware); } @Bean diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagementCacheKeyGenerator.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagementCacheKeyGenerator.java index 1060e30495..db4dd22cd6 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagementCacheKeyGenerator.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SystemManagementCacheKeyGenerator.java @@ -27,8 +27,11 @@ public class SystemManagementCacheKeyGenerator implements CurrentTenantCacheKeyGenerator { private final ThreadLocal createInitialTenant = new ThreadLocal<>(); - @Autowired - private TenantAware tenantAware; + private final TenantAware tenantAware; + + public SystemManagementCacheKeyGenerator(final TenantAware tenantAware) { + this.tenantAware = tenantAware; + } @Override @Bean diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/TargetMetadataCompositeKey.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/TargetMetadataCompositeKey.java index 8f817731d6..f7bf4d3bb3 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/TargetMetadataCompositeKey.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/TargetMetadataCompositeKey.java @@ -11,7 +11,6 @@ import java.io.Serial; import java.io.Serializable; -import java.util.Objects; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/SoftwareModuleSpecification.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/SoftwareModuleSpecification.java index 193502e627..16287e1e53 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/SoftwareModuleSpecification.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/SoftwareModuleSpecification.java @@ -11,10 +11,11 @@ import jakarta.persistence.criteria.ListJoin; +import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaBaseEntity_; +import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaNamedEntity_; +import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaNamedVersionedEntity_; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; -import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; -import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType_; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule_; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -38,13 +39,13 @@ private SoftwareModuleSpecification() { * @return the {@link SoftwareModule} {@link Specification} */ public static Specification byId(final Long swModuleId) { - return (swRoot, query, cb) -> cb.equal(swRoot.get(JpaSoftwareModule_.id), swModuleId); + return (swRoot, query, cb) -> cb.equal(swRoot.get(AbstractJpaBaseEntity_.id), swModuleId); } public static Specification byAssignedToDs(final Long dsId) { return (swRoot, query, cb) -> { final ListJoin join = swRoot.join(JpaSoftwareModule_.assignedTo); - return cb.equal(join.get(JpaDistributionSet_.ID), dsId); + return cb.equal(join.get(AbstractJpaBaseEntity_.ID), dsId); }; } @@ -68,8 +69,8 @@ public static Specification isNotDeleted() { */ public static Specification likeNameAndVersion(final String name, final String version) { return (smRoot, query, cb) -> cb.and( - cb.like(cb.lower(smRoot.get(JpaSoftwareModule_.name)), name.toLowerCase()), - cb.like(cb.lower(smRoot.get(JpaSoftwareModule_.version)), version.toLowerCase())); + cb.like(cb.lower(smRoot.get(AbstractJpaNamedEntity_.name)), name.toLowerCase()), + cb.like(cb.lower(smRoot.get(AbstractJpaNamedVersionedEntity_.version)), version.toLowerCase())); } /** @@ -81,7 +82,7 @@ public static Specification likeNameAndVersion(final String n */ public static Specification equalType(final Long type) { return (smRoot, query, cb) -> cb.equal( - smRoot.get(JpaSoftwareModule_.type).get(JpaSoftwareModuleType_.id), type); + smRoot.get(JpaSoftwareModule_.type).get(AbstractJpaBaseEntity_.id), type); } /** diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TagSpecification.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TagSpecification.java index 34c504249a..57ffdde849 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TagSpecification.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TagSpecification.java @@ -13,10 +13,10 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; +import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaBaseEntity_; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag_; -import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.springframework.data.jpa.domain.Specification; @@ -42,8 +42,7 @@ public static Specification ofDistributionSet(final Long query.distinct(true); - return criteriaBuilder.equal(tagJoin.get(JpaDistributionSet_.id), dsId); + return criteriaBuilder.equal(tagJoin.get(AbstractJpaBaseEntity_.id), dsId); }; - } } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetSpecifications.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetSpecifications.java index 177bec80cf..00d9db2e57 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetSpecifications.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/specifications/TargetSpecifications.java @@ -26,16 +26,12 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; +import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaBaseEntity_; +import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaNamedEntity_; import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.jpa.model.JpaAction_; -import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; -import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType_; -import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet_; -import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup_; -import org.eclipse.hawkbit.repository.jpa.model.JpaRollout_; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; -import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag_; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetType; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetType_; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_; @@ -99,7 +95,7 @@ public static Specification hasControllerIdIn(final Collection hasId(final Long id) { - return (targetRoot, query, cb) -> cb.equal(targetRoot.get(JpaTarget_.id), id); + return (targetRoot, query, cb) -> cb.equal(targetRoot.get(AbstractJpaBaseEntity_.id), id); } /** @@ -109,7 +105,7 @@ public static Specification hasId(final Long id) { * @return the {@link Target} {@link Specification} */ public static Specification hasIdIn(final Collection ids) { - return (targetRoot, query, cb) -> targetRoot.get(JpaTarget_.id).in(ids); + return (targetRoot, query, cb) -> targetRoot.get(AbstractJpaBaseEntity_.id).in(ids); } /** @@ -201,7 +197,7 @@ public static Specification likeControllerIdOrName(final String searc return (targetRoot, query, cb) -> { final String searchTextToLower = searchText.toLowerCase(); return cb.or(cb.like(cb.lower(targetRoot.get(JpaTarget_.controllerId)), searchTextToLower), - cb.like(cb.lower(targetRoot.get(JpaTarget_.name)), searchTextToLower)); + cb.like(cb.lower(targetRoot.get(AbstractJpaNamedEntity_.name)), searchTextToLower)); }; } @@ -227,8 +223,8 @@ public static Specification hasControllerIdAndAssignedDistributionSet @NotNull final Long distributionId) { return (targetRoot, query, cb) -> cb.and(targetRoot.get(JpaTarget_.controllerId).in(tIDs), cb.or( - cb.notEqual(targetRoot.get(JpaTarget_.assignedDistributionSet).get(JpaDistributionSet_.id), distributionId), - cb.isNull(targetRoot. get(JpaTarget_.assignedDistributionSet)))); + cb.notEqual(targetRoot.get(JpaTarget_.assignedDistributionSet).get(AbstractJpaBaseEntity_.id), distributionId), + cb.isNull(targetRoot.get(JpaTarget_.assignedDistributionSet)))); } /** @@ -241,7 +237,7 @@ public static Specification hasControllerIdAndAssignedDistributionSet public static Specification hasTagName(final String tagName) { return (targetRoot, query, cb) -> { final SetJoin join = targetRoot.join(JpaTarget_.tags); - return cb.equal(join.get(JpaTargetTag_.name), tagName); + return cb.equal(join.get(AbstractJpaNamedEntity_.name), tagName); }; } @@ -270,7 +266,7 @@ public static Specification hasTags(final String[] tagNames, final Bo */ public static Specification hasAssignedDistributionSet(final Long distributionSetId) { return (targetRoot, query, cb) -> cb.equal( - targetRoot.get(JpaTarget_.assignedDistributionSet).get(JpaDistributionSet_.id), distributionSetId); + targetRoot.get(JpaTarget_.assignedDistributionSet).get(AbstractJpaBaseEntity_.id), distributionSetId); } /** @@ -283,8 +279,8 @@ public static Specification hasAssignedDistributionSet(final Long dis public static Specification hasNotDistributionSetInActions(final Long distributionSetId) { return (targetRoot, query, cb) -> { final ListJoin actionsJoin = targetRoot.join(JpaTarget_.actions, JoinType.LEFT); - actionsJoin.on(cb.equal(actionsJoin.get(JpaAction_.distributionSet).get(JpaDistributionSet_.id), distributionSetId)); - return cb.isNull(actionsJoin.get(JpaAction_.id)); + actionsJoin.on(cb.equal(actionsJoin.get(JpaAction_.distributionSet).get(AbstractJpaBaseEntity_.id), distributionSetId)); + return cb.isNull(actionsJoin.get(AbstractJpaBaseEntity_.id)); }; } @@ -323,9 +319,9 @@ public static Specification notCompatibleWithDistributionSetType(fina final Subquery compatibilitySubQuery = query.subquery(Long.class); final Root subQueryTargetRoot = compatibilitySubQuery.from(JpaTarget.class); - compatibilitySubQuery.select(subQueryTargetRoot.get(JpaTarget_.id)) + compatibilitySubQuery.select(subQueryTargetRoot.get(AbstractJpaBaseEntity_.id)) .where(cb.and( - cb.equal(targetRoot.get(JpaTarget_.id), subQueryTargetRoot.get(JpaTarget_.id)), + cb.equal(targetRoot.get(AbstractJpaBaseEntity_.id), subQueryTargetRoot.get(AbstractJpaBaseEntity_.id)), cb.equal(getDsTypeIdPath(subQueryTargetRoot), distributionSetTypeId))); return cb.and(targetTypeNotNull, cb.not(cb.exists(compatibilitySubQuery))); @@ -343,7 +339,7 @@ public static Specification isInRolloutGroup(final Long group) { return (targetRoot, query, cb) -> { final ListJoin targetGroupJoin = targetRoot .join(JpaTarget_.rolloutTargetGroup); - return cb.equal(targetGroupJoin.get(RolloutTargetGroup_.rolloutGroup).get(JpaRolloutGroup_.id), group); + return cb.equal(targetGroupJoin.get(RolloutTargetGroup_.rolloutGroup).get(AbstractJpaBaseEntity_.id), group); }; } @@ -357,7 +353,7 @@ public static Specification isInRolloutGroup(final Long group) { public static Specification isInActionRolloutGroup(final Long group) { return (targetRoot, query, cb) -> { final ListJoin targetActionJoin = targetRoot.join(JpaTarget_.actions); - return cb.equal(targetActionJoin.get(JpaAction_.rolloutGroup).get(JpaRolloutGroup_.id), group); + return cb.equal(targetActionJoin.get(JpaAction_.rolloutGroup).get(AbstractJpaBaseEntity_.id), group); }; } @@ -373,7 +369,7 @@ public static Specification isNotInRolloutGroups(final Collection rolloutTargetJoin = targetRoot .join(JpaTarget_.rolloutTargetGroup, JoinType.LEFT); rolloutTargetJoin.on(rolloutTargetJoin.get(RolloutTargetGroup_.rolloutGroup) - .get(JpaRolloutGroup_.id).in(groups)); + .get(AbstractJpaBaseEntity_.id).in(groups)); return cb.isNull(rolloutTargetJoin.get(RolloutTargetGroup_.target)); }; } @@ -389,7 +385,7 @@ public static Specification isNotInGERolloutGroup(final long groupId) final ListJoin rolloutTargetJoin = targetRoot .join(JpaTarget_.rolloutTargetGroup, JoinType.LEFT); rolloutTargetJoin.on(cb.ge(rolloutTargetJoin.get(RolloutTargetGroup_.rolloutGroup) - .get(JpaRolloutGroup_.id), groupId)); + .get(AbstractJpaBaseEntity_.id), groupId)); return cb.isNull(rolloutTargetJoin.get(RolloutTargetGroup_.target)); }; } @@ -406,12 +402,12 @@ public static Specification hasNoActionInRolloutGroup(final Long grou final ListJoin rolloutTargetJoin = targetRoot .join(JpaTarget_.rolloutTargetGroup, JoinType.INNER); rolloutTargetJoin.on( - cb.equal(rolloutTargetJoin.get(RolloutTargetGroup_.rolloutGroup).get(JpaRolloutGroup_.id), group)); + cb.equal(rolloutTargetJoin.get(RolloutTargetGroup_.rolloutGroup).get(AbstractJpaBaseEntity_.id), group)); final ListJoin actionsJoin = targetRoot.join(JpaTarget_.actions, JoinType.LEFT); - actionsJoin.on(cb.equal(actionsJoin.get(JpaAction_.rolloutGroup).get(JpaRolloutGroup_.id), group)); + actionsJoin.on(cb.equal(actionsJoin.get(JpaAction_.rolloutGroup).get(AbstractJpaBaseEntity_.id), group)); - return cb.isNull(actionsJoin.get(JpaAction_.id)); + return cb.isNull(actionsJoin.get(AbstractJpaBaseEntity_.id)); }; } @@ -424,7 +420,7 @@ public static Specification hasNoActionInRolloutGroup(final Long grou */ public static Specification hasInstalledDistributionSet(final Long distributionSetId) { return (targetRoot, query, cb) -> cb.equal( - targetRoot.get(JpaTarget_.installedDistributionSet).get(JpaDistributionSet_.id), distributionSetId); + targetRoot.get(JpaTarget_.installedDistributionSet).get(AbstractJpaBaseEntity_.id), distributionSetId); } /** @@ -437,7 +433,7 @@ public static Specification hasTag(final Long tagId) { return (targetRoot, query, cb) -> { final SetJoin tags = targetRoot.join(JpaTarget_.tags, JoinType.LEFT); - return cb.equal(tags.get(JpaTargetTag_.id), tagId); + return cb.equal(tags.get(AbstractJpaBaseEntity_.id), tagId); }; } @@ -448,8 +444,7 @@ public static Specification hasTag(final Long tagId) { * @return the {@link Target} {@link Specification} */ public static Specification hasTargetType(final long typeId) { - return (targetRoot, query, cb) -> cb.equal(targetRoot.get(JpaTarget_.targetType).get(JpaTargetType_.id), - typeId); + return (targetRoot, query, cb) -> cb.equal(targetRoot.get(JpaTarget_.targetType).get(AbstractJpaBaseEntity_.id), typeId); } /** @@ -471,7 +466,7 @@ public static Specification hasNoTargetType() { */ public static Specification hasTargetTypeNot(final Long typeId) { return (targetRoot, query, cb) -> cb.or(getTargetTypeIsNullPredicate(targetRoot), - cb.notEqual(targetRoot.get(JpaTarget_.targetType).get(JpaTargetType_.id), typeId)); + cb.notEqual(targetRoot.get(JpaTarget_.targetType).get(AbstractJpaBaseEntity_.id), typeId)); } public static Specification failedActionsForRollout(final String rolloutId) { @@ -500,28 +495,28 @@ public static Specification hasNoActiveActionWithGEWeightOrInRollout( cb.gt(actionsJoin.get(JpaAction_.weight), weight), cb.and( cb.equal(actionsJoin.get(JpaAction_.weight), weight), - cb.ge(actionsJoin.get(JpaAction_.ROLLOUT).get(JpaRollout_.ID), rolloutId)))); + cb.ge(actionsJoin.get(JpaAction_.ROLLOUT).get(AbstractJpaBaseEntity_.ID), rolloutId)))); // another, but probably heavier variant // actionsJoin.on( // cb.or( // // in rollout -// cb.equal(actionsJoin.get(JpaAction_.ROLLOUT).get(JpaRollout_.ID), rolloutId), +// cb.equal(actionsJoin.get(JpaAction_.ROLLOUT).get(AbstractJpaBaseEntity_.ID), rolloutId), // // or, in newer rollout with greater or equal weight // cb.and( -// cb.gt(actionsJoin.get(JpaAction_.ROLLOUT).get(JpaRollout_.ID), rolloutId), +// cb.gt(actionsJoin.get(JpaAction_.ROLLOUT).get(AbstractJpaBaseEntity_.ID), rolloutId), // cb.ge(actionsJoin.get(JpaAction_.weight), weight)), // // or, in older with greater status // cb.and( -// cb.lt(actionsJoin.get(JpaAction_.ROLLOUT).get(JpaRollout_.ID), rolloutId), +// cb.lt(actionsJoin.get(JpaAction_.ROLLOUT).get(AbstractJpaBaseEntity_.ID), rolloutId), // cb.gt(actionsJoin.get(JpaAction_.weight), weight)))); - return cb.isNull(actionsJoin.get(JpaAction_.id)); + return cb.isNull(actionsJoin.get(AbstractJpaBaseEntity_.id)); }; } private static Predicate getHasTagsPredicate(final Root targetRoot, final CriteriaBuilder cb, final Boolean selectTargetWithNoTag, final String[] tagNames) { final SetJoin tags = targetRoot.join(JpaTarget_.tags, JoinType.LEFT); - final Path exp = tags.get(JpaTargetTag_.name); + final Path exp = tags.get(AbstractJpaNamedEntity_.name); final List hasTagsPredicates = new ArrayList<>(); if (isNoTagActive(selectTargetWithNoTag)) { @@ -549,6 +544,6 @@ private static Predicate getTargetTypeIsNullPredicate(final Root targ private static Path getDsTypeIdPath(final Root root) { final Join targetTypeJoin = root.join(JpaTarget_.targetType, JoinType.LEFT); - return targetTypeJoin.join(JpaTargetType_.distributionSetTypes, JoinType.LEFT).get(JpaDistributionSetType_.id); + return targetTypeJoin.join(JpaTargetType_.distributionSetTypes, JoinType.LEFT).get(AbstractJpaBaseEntity_.id); } } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/utils/StatisticsUtils.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/utils/StatisticsUtils.java index 30dfafce25..e9071d7bca 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/utils/StatisticsUtils.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/utils/StatisticsUtils.java @@ -31,6 +31,7 @@ @NoArgsConstructor(access = AccessLevel.PRIVATE) public class StatisticsUtils { + @SuppressWarnings("java:S5164") // intentionally don't call remove. should always keep the last reported private static final ThreadLocal> LAST_COUNTERS = ThreadLocal.withInitial(MapUFToString::new); // for test purposes we may want to flush the statistics and to get diff from the last get int THIS thread diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetEventTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetEventTest.java index 96b012d9e7..391e6df36c 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetEventTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetEventTest.java @@ -20,17 +20,17 @@ */ @Feature("Component Tests - Repository") @Story("Test TargetCreatedEvent, TargetUpdatedEvent and CancelTargetAssignmentEvent") -public class TargetEventTest extends AbstractRemoteEntityEventTest { +class TargetEventTest extends AbstractRemoteEntityEventTest { @Test @Description("Verifies that the target entity reloading by remote created event works") - public void testTargetCreatedEvent() { + void testTargetCreatedEvent() { assertAndCreateRemoteEvent(TargetCreatedEvent.class); } @Test @Description("Verifies that the target entity reloading by remote updated event works") - public void testTargetUpdatedEvent() { + void testTargetUpdatedEvent() { assertAndCreateRemoteEvent(TargetUpdatedEvent.class); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTagEventTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTagEventTest.java index 875639d8ee..807f4ee344 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTagEventTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/event/remote/entity/TargetTagEventTest.java @@ -20,17 +20,17 @@ */ @Feature("Component Tests - Repository") @Story("Test TargetTagCreatedEvent and TargetTagUpdateEvent") -public class TargetTagEventTest extends AbstractRemoteEntityEventTest { +class TargetTagEventTest extends AbstractRemoteEntityEventTest { @Test @Description("Verifies that the target tag entity reloading by remote created event works") - public void testTargetTagCreatedEvent() { + void testTargetTagCreatedEvent() { assertAndCreateRemoteEvent(TargetTagCreatedEvent.class); } @Test @Description("Verifies that the target tag entity reloading by remote updated event works") - public void testTargetTagUpdateEventt() { + void testTargetTagUpdateEventt() { assertAndCreateRemoteEvent(TargetTagUpdatedEvent.class); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareManagementSecurityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareManagementSecurityTest.java index 5c901f10f5..414ef7edb8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareManagementSecurityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareManagementSecurityTest.java @@ -24,7 +24,7 @@ @Feature("SecurityTests - SoftwareManagement") @Story("SecurityTests SoftwareManagement") -public class SoftwareManagementSecurityTest +class SoftwareManagementSecurityTest extends AbstractRepositoryManagementSecurityTest { @Override diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareModuleManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareModuleManagementTest.java index cacd696272..9a0c706bf2 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareModuleManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareModuleManagementTest.java @@ -25,7 +25,6 @@ import io.qameta.allure.Description; import io.qameta.allure.Feature; import io.qameta.allure.Story; -import org.apache.commons.lang3.RandomUtils; import org.eclipse.hawkbit.repository.builder.SoftwareModuleMetadataCreate; import org.eclipse.hawkbit.repository.event.remote.entity.SoftwareModuleCreatedEvent; import org.eclipse.hawkbit.repository.exception.AssignmentQuotaExceededException; @@ -358,7 +357,7 @@ void deleteSoftwareModulesWithSharedArtifact() { // Init artifact binary data, target and DistributionSets final int artifactSize = 1024; - final byte[] source = RandomUtils.nextBytes(artifactSize); + final byte[] source = randomBytes(artifactSize); // [STEP1]: Create SoftwareModuleX and add a new ArtifactX SoftwareModule moduleX = createSoftwareModuleWithArtifacts(osType, "modulex", "v1.0", 0); @@ -403,7 +402,7 @@ void deleteSoftwareModulesWithSharedArtifact() { void deleteMultipleSoftwareModulesWhichShareAnArtifact() { // Init artifact binary data, target and DistributionSets final int artifactSize = 1024; - final byte[] source = RandomUtils.nextBytes(artifactSize); + final byte[] source = randomBytes(artifactSize); final Target target = testdataFactory.createTarget(); // [STEP1]: Create SoftwareModuleX and add a new ArtifactX @@ -533,9 +532,10 @@ void createSoftwareModuleMetadataUntilQuotaIsExceeded() { } // quota exceeded + final SoftwareModuleMetadataCreate metadata = entityFactory.softwareModuleMetadata().create(module.getId()) + .key("k" + maxMetaData).value("v" + maxMetaData); assertThatExceptionOfType(AssignmentQuotaExceededException.class) - .isThrownBy(() -> softwareModuleManagement.updateMetaData(entityFactory.softwareModuleMetadata() - .create(module.getId()).key("k" + maxMetaData).value("v" + maxMetaData))); + .isThrownBy(() -> softwareModuleManagement.updateMetaData(metadata)); // add multiple meta data entries at once final SoftwareModule module2 = testdataFactory.createSoftwareModuleApp("m2"); @@ -574,12 +574,12 @@ void createSoftwareModuleMetadataFailsIfKeyExists() { final String knownValue1 = "myKnownValue1"; final SoftwareModule ah = testdataFactory.createSoftwareModuleApp(); - softwareModuleManagement.updateMetaData(entityFactory.softwareModuleMetadata().create(ah.getId()).key(knownKey1) - .value(knownValue1).targetVisible(true)); + final SoftwareModuleMetadataCreate metadata = entityFactory.softwareModuleMetadata() + .create(ah.getId()).key(knownKey1).value(knownValue1).targetVisible(true); + softwareModuleManagement.updateMetaData(metadata); assertThatExceptionOfType(EntityAlreadyExistsException.class) - .isThrownBy(() -> softwareModuleManagement.updateMetaData(entityFactory.softwareModuleMetadata() - .create(ah.getId()).key(knownKey1).value(knownValue1).targetVisible(true))) + .isThrownBy(() -> softwareModuleManagement.updateMetaData(metadata)) .withMessageContaining("Metadata").withMessageContaining(knownKey1); final String knownKey2 = "myKnownKey2"; @@ -587,9 +587,10 @@ void createSoftwareModuleMetadataFailsIfKeyExists() { softwareModuleManagement.updateMetaData(entityFactory.softwareModuleMetadata().create(ah.getId()).key(knownKey2) .value(knownValue1).targetVisible(false)); + final SoftwareModuleMetadataCreate metadata2 = entityFactory.softwareModuleMetadata().create(ah.getId()) + .key(knownKey2).value(knownValue1).targetVisible(true); assertThatExceptionOfType(EntityAlreadyExistsException.class) - .isThrownBy(() -> softwareModuleManagement.updateMetaData(entityFactory.softwareModuleMetadata() - .create(ah.getId()).key(knownKey2).value(knownValue1).targetVisible(true))) + .isThrownBy(() -> softwareModuleManagement.updateMetaData(metadata2)) .withMessageContaining("Metadata").withMessageContaining(knownKey2); } @@ -746,36 +747,32 @@ void unlockSoftwareModule() { @Test @Description("Artifacts of a locked SM can't be modified. Expected behaviour is to throw an exception and to do not modify them.") void lockSoftwareModuleApplied() { - final SoftwareModule softwareModule = testdataFactory.createSoftwareModule("sm-1"); + final Long softwareModuleId = testdataFactory.createSoftwareModule("sm-1").getId(); artifactManagement.create( - new ArtifactUpload(new ByteArrayInputStream(new byte[] { 1 }), softwareModule.getId(), - "artifact1", false, 1)); - final int artifactCount = softwareModuleManagement.get(softwareModule.getId()).get().getArtifacts().size(); - assertThat(artifactCount).isNotEqualTo(0); - softwareModuleManagement.lock(softwareModule.getId()); - assertThat( - softwareModuleManagement.get(softwareModule.getId()).map(SoftwareModule::isLocked).orElse(false)) + new ArtifactUpload(new ByteArrayInputStream(new byte[] { 1 }), softwareModuleId, "artifact1", false, 1)); + final int artifactCount = softwareModuleManagement.get(softwareModuleId).get().getArtifacts().size(); + assertThat(artifactCount).isNotZero(); + softwareModuleManagement.lock(softwareModuleId); + assertThat(softwareModuleManagement.get(softwareModuleId).map(SoftwareModule::isLocked).orElse(false)) .isTrue(); // try add + final ArtifactUpload artifactUpload = new ArtifactUpload(new ByteArrayInputStream(new byte[] { 2 }), softwareModuleId, "artifact2", false, 1); assertThatExceptionOfType(LockedException.class) .as("Attempt to modify a locked SM artifacts should throw an exception") - .isThrownBy(() -> artifactManagement.create( - new ArtifactUpload(new ByteArrayInputStream(new byte[] { 2 }), softwareModule.getId(), - "artifact2", false, 1))); - assertThat(softwareModuleManagement.get(softwareModule.getId()).get().getArtifacts().size()) + .isThrownBy(() -> artifactManagement.create(artifactUpload)); + assertThat(softwareModuleManagement.get(softwareModuleId).get().getArtifacts()) .as("Artifacts shall not be added to a locked SM.") - .isEqualTo(artifactCount); + .hasSize(artifactCount); // try remove - final long artifactId = softwareModuleManagement.get(softwareModule.getId()).get() - .getArtifacts().stream().findFirst().get().getId(); + final long artifactId = softwareModuleManagement.get(softwareModuleId).get().getArtifacts().stream().findFirst().get().getId(); assertThatExceptionOfType(LockedException.class) .as("Attempt to modify a locked SM artifacts should throw an exception") .isThrownBy(() -> artifactManagement.delete(artifactId)); - assertThat(softwareModuleManagement.get(softwareModule.getId()).get().getArtifacts().size()) + assertThat(softwareModuleManagement.get(softwareModuleId).get().getArtifacts()) .as("Artifact shall not be removed from a locked SM.") - .isEqualTo(artifactCount); + .hasSize(artifactCount); assertThat(artifactManagement.get(artifactId)) .as("Artifact shall not be removed if belongs to a locked SM.") .isPresent(); @@ -786,7 +783,7 @@ void lockSoftwareModuleApplied() { void lockedContainingDistributionSetApplied() { final DistributionSet distributionSet = testdataFactory.createDistributionSet("ds-1"); final List modules = distributionSet.getModules().stream().toList(); - assertThat(modules.size()).isGreaterThan(1); + assertThat(modules).hasSizeGreaterThan(1); // try delete while DS is not locked softwareModuleManagement.delete(modules.get(0).getId()); @@ -797,9 +794,10 @@ void lockedContainingDistributionSetApplied() { .isTrue(); // try delete SM of a locked DS + final Long moduleId = modules.get(1).getId(); assertThatExceptionOfType(LockedException.class) .as("Attempt to delete a software module of a locked DS should throw an exception") - .isThrownBy(() -> softwareModuleManagement.delete(modules.get(1).getId())); + .isThrownBy(() -> softwareModuleManagement.delete(moduleId)); } private Action assignSet(final JpaTarget target, final JpaDistributionSet ds) { @@ -817,7 +815,6 @@ private Action assignSet(final JpaTarget target, final JpaDistributionSet ds) { cb.equal(root.get(JpaAction_.target).get(JpaTarget_.id), target.getId()), cb.equal(root.get(JpaAction_.distributionSet).get(JpaDistributionSet_.id), ds.getId())), PAGE).getContent().get(0); - ; assertThat(action).isNotNull(); return action; } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareModuleTypeManagementSecurityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareModuleTypeManagementSecurityTest.java index bcd70dce01..efc0002e45 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareModuleTypeManagementSecurityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SoftwareModuleTypeManagementSecurityTest.java @@ -25,7 +25,7 @@ @Feature("SecurityTests - SoftwareModuleTypeManagement") @Story("SecurityTests SoftwareModuleTypeManagement") -public class SoftwareModuleTypeManagementSecurityTest +class SoftwareModuleTypeManagementSecurityTest extends AbstractRepositoryManagementSecurityTest { @Override 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 870cc0b2b7..f78dddff4d 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 @@ -10,7 +10,7 @@ package org.eclipse.hawkbit.repository.jpa.management; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.fail; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import java.util.Arrays; import java.util.List; @@ -32,13 +32,13 @@ @Feature("Component Tests - Repository") @Story("Software Module Management") -public class SoftwareModuleTypeManagementTest extends AbstractJpaIntegrationTest { +class SoftwareModuleTypeManagementTest extends AbstractJpaIntegrationTest { @Test @Description("Verifies that management get access reacts as specfied on calls for non existing entities by means " + "of Optional not present.") @ExpectEvents({ @Expect(type = SoftwareModuleCreatedEvent.class, count = 0) }) - public void nonExistingEntityAccessReturnsNotPresent() { + void nonExistingEntityAccessReturnsNotPresent() { assertThat(softwareModuleTypeManagement.get(NOT_EXIST_IDL)).isNotPresent(); assertThat(softwareModuleTypeManagement.findByKey(NOT_EXIST_ID)).isNotPresent(); @@ -49,7 +49,7 @@ public void nonExistingEntityAccessReturnsNotPresent() { @Description("Verifies that management queries react as specfied on calls for non existing entities " + " by means of throwing EntityNotFoundException.") @ExpectEvents({ @Expect(type = SoftwareModuleCreatedEvent.class, count = 0) }) - public void entityQueriesReferringToNotExistingEntitiesThrowsException() { + void entityQueriesReferringToNotExistingEntitiesThrowsException() { verifyThrownExceptionBy(() -> softwareModuleTypeManagement.delete(NOT_EXIST_IDL), "SoftwareModuleType"); verifyThrownExceptionBy( @@ -59,7 +59,7 @@ public void entityQueriesReferringToNotExistingEntitiesThrowsException() { @Test @Description("Calling update without changing fields results in no recorded change in the repository including unchanged audit fields.") - public void updateNothingResultsInUnchangedRepositoryForType() { + void updateNothingResultsInUnchangedRepositoryForType() { final SoftwareModuleType created = softwareModuleTypeManagement .create(entityFactory.softwareModuleType().create().key("test-key").name("test-name")); @@ -73,7 +73,7 @@ public void updateNothingResultsInUnchangedRepositoryForType() { @Test @Description("Calling update for changed fields results in change in the repository.") - public void updateSoftwareModuleTypeFieldsToNewValue() { + void updateSoftwareModuleTypeFieldsToNewValue() { final SoftwareModuleType created = softwareModuleTypeManagement .create(entityFactory.softwareModuleType().create().key("test-key").name("test-name")); @@ -88,23 +88,19 @@ public void updateSoftwareModuleTypeFieldsToNewValue() { @Test @Description("Create Software Module Types call fails when called for existing entities.") - public void createModuleTypesCallFailsForExistingTypes() { + void _for() { final List created = Arrays.asList( entityFactory.softwareModuleType().create().key("test-key").name("test-name"), entityFactory.softwareModuleType().create().key("test-key2").name("test-name2")); - softwareModuleTypeManagement.create(created); - try { - softwareModuleTypeManagement.create(created); - fail("Should not have worked as module already exists."); - } catch (final EntityAlreadyExistsException e) { - - } + assertThatExceptionOfType(EntityAlreadyExistsException.class) + .as("should not have worked as module type already exists") + .isThrownBy(() -> softwareModuleTypeManagement.create(created)); } @Test @Description("Tests the successfull deletion of software module types. Both unused (hard delete) and used ones (soft delete).") - public void deleteAssignedAndUnassignedSoftwareModuleTypes() { + void deleteAssignedAndUnassignedSoftwareModuleTypes() { assertThat(softwareModuleTypeManagement.findAll(PAGE)).hasSize(3).contains(osType, runtimeType, appType); SoftwareModuleType type = softwareModuleTypeManagement @@ -140,64 +136,56 @@ public void deleteAssignedAndUnassignedSoftwareModuleTypes() { @Test @Description("Checks that software module typeis found based on given name.") - public void findSoftwareModuleTypeByName() { + void findSoftwareModuleTypeByName() { testdataFactory.createSoftwareModuleOs(); final SoftwareModuleType found = softwareModuleTypeManagement .create(entityFactory.softwareModuleType().create().key("thetype").name("thename")); softwareModuleTypeManagement .create(entityFactory.softwareModuleType().create().key("thetype2").name("anothername")); - assertThat(softwareModuleTypeManagement.findByName("thename").get()).as("Type with given name").isEqualTo(found); + assertThat(softwareModuleTypeManagement.findByName("thename")).as("Type with given name").contains(found); } @Test @Description("Verifies that it is not possible to create a type that alrady exists.") - public void createSoftwareModuleTypeFailsWithExistingEntity() { - softwareModuleTypeManagement.create(entityFactory.softwareModuleType().create().key("thetype").name("thename")); - try { - softwareModuleTypeManagement - .create(entityFactory.softwareModuleType().create().key("thetype").name("thename")); - fail("should not have worked as module type already exists"); - } catch (final EntityAlreadyExistsException e) { - - } - + void createSoftwareModuleTypeFailsWithExistingEntity() { + final SoftwareModuleTypeCreate create = entityFactory.softwareModuleType().create().key("thetype").name("thename"); + softwareModuleTypeManagement.create(create); + assertThatExceptionOfType(EntityAlreadyExistsException.class) + .as("should not have worked as module type already exists") + .isThrownBy(() -> softwareModuleTypeManagement + .create(create)); } @Test @Description("Verifies that it is not possible to create a list of types where one already exists.") - public void createSoftwareModuleTypesFailsWithExistingEntity() { + void createSoftwareModuleTypesFailsWithExistingEntity() { softwareModuleTypeManagement.create(entityFactory.softwareModuleType().create().key("thetype").name("thename")); - try { - softwareModuleTypeManagement - .create(Arrays.asList(entityFactory.softwareModuleType().create().key("thetype").name("thename"), - entityFactory.softwareModuleType().create().key("anothertype").name("anothername"))); - fail("should not have worked as module type already exists"); - } catch (final EntityAlreadyExistsException e) { - - } + final List creates = List.of( + entityFactory.softwareModuleType().create().key("thetype").name("thename"), + entityFactory.softwareModuleType().create().key("anothertype").name("anothername")); + assertThatExceptionOfType(EntityAlreadyExistsException.class) + .as("should not have worked as module type already exists") + .isThrownBy(() -> softwareModuleTypeManagement.create(creates)); } @Test @Description("Verifies that the creation of a softwareModuleType is failing because of invalid max assignment") - public void createSoftwareModuleTypesFailsWithInvalidMaxAssignment() { - try { - softwareModuleTypeManagement - .create(entityFactory.softwareModuleType().create().key("type").name("name").maxAssignments(0)); - fail("should not have worked as max assignment is invalid. Should be greater than 0."); - } catch (final ConstraintViolationException e) { - - } + void createSoftwareModuleTypesFailsWithInvalidMaxAssignment() { + final SoftwareModuleTypeCreate create = entityFactory.softwareModuleType().create().key("type").name("name").maxAssignments(0); + assertThatExceptionOfType(ConstraintViolationException.class) + .as("should not have worked as max assignment is invalid. Should be greater than 0") + .isThrownBy(() -> softwareModuleTypeManagement.create(create)); } @Test @Description("Verifies that multiple types are created as requested.") - public void createMultipleSoftwareModuleTypes() { + void createMultipleSoftwareModuleTypes() { final List created = softwareModuleTypeManagement .create(Arrays.asList(entityFactory.softwareModuleType().create().key("thetype").name("thename"), entityFactory.softwareModuleType().create().key("thetype2").name("thename2"))); - assertThat(created.size()).as("Number of created types").isEqualTo(2); + assertThat(created).as("Number of created types").hasSize(2); assertThat(softwareModuleTypeManagement.count()).as("Number of types in repository").isEqualTo(5); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SystemManagementSecurityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SystemManagementSecurityTest.java index b4827fb47f..87ebfbeb32 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SystemManagementSecurityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SystemManagementSecurityTest.java @@ -22,7 +22,7 @@ @Slf4j @Feature("SecurityTests - SystemManagement") @Story("SecurityTests SystemManagement") -public class SystemManagementSecurityTest extends AbstractJpaIntegrationTest { +class SystemManagementSecurityTest extends AbstractJpaIntegrationTest { @Test @Description("Tests ManagementAPI PreAuthorized method with correct and insufficient permissions.") diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SystemManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SystemManagementTest.java index 5aac39bedb..1856d75b80 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SystemManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SystemManagementTest.java @@ -87,7 +87,7 @@ void systemUsageReportCollectsTargetsOfAllTenants() throws Exception { // overall data assertThat(systemManagement.getSystemUsageStatistics().getOverallTargets()).isEqualTo(200); - assertThat(systemManagement.getSystemUsageStatistics().getOverallActions()).isEqualTo(0); + assertThat(systemManagement.getSystemUsageStatistics().getOverallActions()).isZero(); // per tenant data final List tenants = systemManagement.getSystemUsageStatisticsWithTenants().getTenants(); @@ -123,7 +123,7 @@ void systemUsageReportCollectsActionsOfAllTenants() throws Exception { private byte[] createTestTenantsForSystemStatistics(final int tenants, final int artifactSize, final int targets, final int updates) throws Exception { final Random randomgen = new Random(); - final byte random[] = new byte[artifactSize]; + final byte[] random = new byte[artifactSize]; randomgen.nextBytes(random); for (int i = 0; i < tenants; i++) { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetFilterQueryManagementSecurityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetFilterQueryManagementSecurityTest.java index 79dd061409..edcd5fd830 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetFilterQueryManagementSecurityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetFilterQueryManagementSecurityTest.java @@ -21,7 +21,7 @@ @Feature("SecurityTests - TargetFilterQueryManagement") @Story("SecurityTests TargetFilterQueryManagement") -public class TargetFilterQueryManagementSecurityTest extends AbstractJpaIntegrationTest { +class TargetFilterQueryManagementSecurityTest extends AbstractJpaIntegrationTest { @Test @Description("Tests ManagementAPI PreAuthorized method with correct and insufficient permissions.") diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetFilterQueryManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetFilterQueryManagementTest.java index a9cccdb64a..2968a1498e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetFilterQueryManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetFilterQueryManagementTest.java @@ -61,13 +61,13 @@ */ @Feature("Component Tests - Repository") @Story("Target Filter Query Management") -public class TargetFilterQueryManagementTest extends AbstractJpaIntegrationTest { +class TargetFilterQueryManagementTest extends AbstractJpaIntegrationTest { @Test @Description("Verifies that management get access reacts as specfied on calls for non existing entities by means " + "of Optional not present.") @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) - public void nonExistingEntityAccessReturnsNotPresent() { + void nonExistingEntityAccessReturnsNotPresent() { assertThat(targetFilterQueryManagement.get(NOT_EXIST_IDL)).isNotPresent(); assertThat(targetFilterQueryManagement.getByName(NOT_EXIST_ID)).isNotPresent(); } @@ -79,7 +79,7 @@ public void nonExistingEntityAccessReturnsNotPresent() { @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = TargetFilterQueryCreatedEvent.class, count = 1) }) - public void entityQueriesReferringToNotExistingEntitiesThrowsException() { + void entityQueriesReferringToNotExistingEntitiesThrowsException() { final DistributionSet set = testdataFactory.createDistributionSet(); final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement.create( entityFactory.targetFilterQuery().create().name("test filter").query("name==PendingTargets001")); @@ -110,7 +110,7 @@ public void entityQueriesReferringToNotExistingEntitiesThrowsException() { @Test @Description("Test creation of target filter query.") - public void createTargetFilterQuery() { + void createTargetFilterQuery() { final String filterName = "new target filter"; final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement .create(entityFactory.targetFilterQuery().create().name(filterName).query("name==PendingTargets001")); @@ -120,7 +120,7 @@ public void createTargetFilterQuery() { @Test @Description("Create a target filter query with an auto-assign distribution set and a query string that addresses too many targets.") - public void createTargetFilterQueryThatExceedsQuota() { + void createTargetFilterQueryThatExceedsQuota() { // create targets final int maxTargets = quotaManagement.getMaxTargetsPerAutoAssignment(); @@ -135,7 +135,7 @@ public void createTargetFilterQueryThatExceedsQuota() { @Test @Description("Test searching a target filter query.") - public void searchTargetFilterQuery() { + void searchTargetFilterQuery() { final String filterName = "targetFilterQueryName"; final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement .create(entityFactory.targetFilterQuery().create().name(filterName).query("name==PendingTargets001")); @@ -151,7 +151,7 @@ public void searchTargetFilterQuery() { @Test @Description("Test searching a target filter query with an invalid filter.") - public void searchTargetFilterQueryInvalidField() { + void searchTargetFilterQueryInvalidField() { Assertions.assertThatExceptionOfType(RSQLParameterUnsupportedFieldException.class) .isThrownBy(() -> targetFilterQueryManagement .findByRsql(PageRequest.of(0, 10), "unknownField==testValue").getContent()); @@ -159,7 +159,7 @@ public void searchTargetFilterQueryInvalidField() { @Test @Description("Checks if the EntityAlreadyExistsException is thrown if a targetfilterquery with the same name are created more than once.") - public void createDuplicateTargetFilterQuery() { + void createDuplicateTargetFilterQuery() { final String filterName = "new target filter duplicate"; targetFilterQueryManagement .create(entityFactory.targetFilterQuery().create().name(filterName).query("name==PendingTargets001")); @@ -172,7 +172,7 @@ public void createDuplicateTargetFilterQuery() { @Test @Description("Test deletion of target filter query.") - public void deleteTargetFilterQuery() { + void deleteTargetFilterQuery() { final String filterName = "delete_target_filter_query"; final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement .create(entityFactory.targetFilterQuery().create().name(filterName).query("name==PendingTargets001")); @@ -183,7 +183,7 @@ public void deleteTargetFilterQuery() { @Test @Description("Test updation of target filter query.") - public void updateTargetFilterQuery() { + void updateTargetFilterQuery() { final String filterName = "target_filter_01"; final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement .create(entityFactory.targetFilterQuery().create().name(filterName).query("name==PendingTargets001")); @@ -197,7 +197,7 @@ public void updateTargetFilterQuery() { @Test @Description("Test assigning a distribution set for auto assignment with different action types") - public void assignDistributionSet() { + void assignDistributionSet() { final String filterName = "target_filter_02"; final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement .create(entityFactory.targetFilterQuery().create().name(filterName).query("name==PendingTargets001")); @@ -218,7 +218,7 @@ public void assignDistributionSet() { @Test @Description("Assigns a distribution set to an existing filter query and verifies that the quota 'max targets per auto assignment' is enforced.") - public void assignDistributionSetToTargetFilterQueryThatExceedsQuota() { + void assignDistributionSetToTargetFilterQueryThatExceedsQuota() { // create targets final int maxTargets = quotaManagement.getMaxTargetsPerAutoAssignment(); @@ -239,7 +239,7 @@ public void assignDistributionSetToTargetFilterQueryThatExceedsQuota() { @Test @Description("Updates an existing filter query with a query string that addresses too many targets.") - public void updateTargetFilterQueryWithQueryThatExceedsQuota() { + void updateTargetFilterQueryWithQueryThatExceedsQuota() { // create targets final int maxTargets = quotaManagement.getMaxTargetsPerAutoAssignment(); testdataFactory.createTargets(maxTargets + 1, "target%s"); @@ -256,7 +256,7 @@ public void updateTargetFilterQueryWithQueryThatExceedsQuota() { @Test @Description("Test removing distribution set while it has a relation to a target filter query") - public void removeAssignDistributionSet() { + void removeAssignDistributionSet() { final String filterName = "target_filter_03"; final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement .create(entityFactory.targetFilterQuery().create().name(filterName).query("name==PendingTargets001")); @@ -283,7 +283,7 @@ public void removeAssignDistributionSet() { @Test @Description("Test to implicitly remove the auto assign distribution set when the ds is soft deleted") - public void implicitlyRemoveAssignDistributionSet() { + void implicitlyRemoveAssignDistributionSet() { final String filterName = "target_filter_03"; final DistributionSet distributionSet = testdataFactory.createDistributionSet("dist_set"); final Target target = testdataFactory.createTarget(); @@ -319,7 +319,7 @@ public void implicitlyRemoveAssignDistributionSet() { @Test @Description("Test finding and auto assign distribution set") - public void findFiltersWithDistributionSet() { + void findFiltersWithDistributionSet() { final String filterName = "d"; assertEquals(0L, targetFilterQueryManagement.count()); targetFilterQueryManagement.create(entityFactory.targetFilterQuery().create().name("a").query("name==*")); @@ -351,7 +351,7 @@ public void findFiltersWithDistributionSet() { @Test @Description("Creating or updating a target filter query with autoassignment and no-value weight when multi assignment in enabled.") - public void weightNotRequiredInMultiAssignmentMode() { + void weightNotRequiredInMultiAssignmentMode() { enableMultiAssignments(); final DistributionSet ds = testdataFactory.createDistributionSet(); final Long filterId = targetFilterQueryManagement @@ -369,7 +369,7 @@ public void weightNotRequiredInMultiAssignmentMode() { @Test @Description("Creating or updating a target filter query with autoassignment with a weight causes an error when multi assignment in disabled.") - public void weightAllowedWhenMultiAssignmentModeNotEnabled() { + void weightAllowedWhenMultiAssignmentModeNotEnabled() { final DistributionSet ds = testdataFactory.createDistributionSet(); final Long filterId = targetFilterQueryManagement .create(entityFactory.targetFilterQuery().create().name("a").query("name==*")).getId(); @@ -387,7 +387,7 @@ public void weightAllowedWhenMultiAssignmentModeNotEnabled() { @Test @Description("Auto assignment can be removed from filter when multi assignment in enabled.") - public void removeDsFromFilterWhenMultiAssignmentModeNotEnabled() { + void removeDsFromFilterWhenMultiAssignmentModeNotEnabled() { enableMultiAssignments(); final DistributionSet ds = testdataFactory.createDistributionSet(); final Long filterId = targetFilterQueryManagement @@ -401,7 +401,7 @@ public void removeDsFromFilterWhenMultiAssignmentModeNotEnabled() { @Test @Description("Weight is validated and saved to the Filter.") - public void weightValidatedAndSaved() { + void weightValidatedAndSaved() { enableMultiAssignments(); final DistributionSet ds = testdataFactory.createDistributionSet(); @@ -411,8 +411,7 @@ public void weightValidatedAndSaved() { final Long filterId = targetFilterQueryManagement.create(entityFactory.targetFilterQuery().create().name("a") .query("name==*").autoAssignDistributionSet(ds).autoAssignWeight(Action.WEIGHT_MAX)).getId(); - assertThat(targetFilterQueryManagement.get(filterId).get().getAutoAssignWeight().get()) - .isEqualTo(Action.WEIGHT_MAX); + assertThat(targetFilterQueryManagement.get(filterId).get().getAutoAssignWeight()).contains(Action.WEIGHT_MAX); Assertions.assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> targetFilterQueryManagement.updateAutoAssignDS(entityFactory.targetFilterQuery() @@ -424,13 +423,12 @@ public void weightValidatedAndSaved() { entityFactory.targetFilterQuery().updateAutoAssign(filterId).ds(ds.getId()).weight(Action.WEIGHT_MAX)); targetFilterQueryManagement.updateAutoAssignDS( entityFactory.targetFilterQuery().updateAutoAssign(filterId).ds(ds.getId()).weight(Action.WEIGHT_MIN)); - assertThat(targetFilterQueryManagement.get(filterId).get().getAutoAssignWeight().get()) - .isEqualTo(Action.WEIGHT_MIN); + assertThat(targetFilterQueryManagement.get(filterId).get().getAutoAssignWeight()).contains(Action.WEIGHT_MIN); } @Test @Description("Verifies that an exception is thrown when trying to create a target filter with an invalidated distribution set.") - public void createTargetFilterWithInvalidDistributionSet() { + void createTargetFilterWithInvalidDistributionSet() { final DistributionSet distributionSet = testdataFactory.createAndInvalidateDistributionSet(); assertThatExceptionOfType(InvalidDistributionSetException.class) @@ -442,7 +440,7 @@ public void createTargetFilterWithInvalidDistributionSet() { @Test @Description("Verifies that an exception is thrown when trying to create a target filter with an incomplete distribution set.") - public void createTargetFilterWithIncompleteDistributionSet() { + void createTargetFilterWithIncompleteDistributionSet() { final DistributionSet distributionSet = testdataFactory.createIncompleteDistributionSet(); assertThatExceptionOfType(IncompleteDistributionSetException.class) @@ -454,7 +452,7 @@ public void createTargetFilterWithIncompleteDistributionSet() { @Test @Description("Verifies that an exception is thrown when trying to update a target filter with an invalidated distribution set.") - public void updateAutoAssignDsWithInvalidDistributionSet() { + void updateAutoAssignDsWithInvalidDistributionSet() { final DistributionSet distributionSet = testdataFactory.createDistributionSet(); final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement .create(entityFactory.targetFilterQuery().create().name("updateAutoAssignDsWithInvalidDistributionSet") @@ -470,7 +468,7 @@ public void updateAutoAssignDsWithInvalidDistributionSet() { @Test @Description("Verifies that an exception is thrown when trying to update a target filter with an incomplete distribution set.") - public void updateAutoAssignDsWithIncompleteDistributionSet() { + void updateAutoAssignDsWithIncompleteDistributionSet() { final DistributionSet distributionSet = testdataFactory.createDistributionSet(); final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement.create( entityFactory.targetFilterQuery().create().name("updateAutoAssignDsWithIncompleteDistributionSet") diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementSearchTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementSearchTest.java index eb5b2e0f68..7ef7848349 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementSearchTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementSearchTest.java @@ -41,7 +41,7 @@ class TargetManagementSearchTest extends AbstractJpaIntegrationTest { @Test @Description("Verifies that targets with given target type are returned from repository.") - public void findTargetByTargetType() { + void findTargetByTargetType() { final TargetType testType = testdataFactory.createTargetType("testType", Collections.singletonList(standardDsType)); final List unassigned = testdataFactory.createTargets(9, "unassigned"); @@ -451,12 +451,12 @@ private void verifyThat0TargetsAreInStatusUnknownAndHaveDSAssigned(final Distrib + setA.getName() + ")"; assertThat(targetManagement.findByFilters(PAGE, filterParams).getContent()) - .as("has number of elements") - .hasSize(0) .as("that number is also returned by count query") .hasSize((int) targetManagement.countByFilters(filterParams)) .as("and filter query returns the same result") - .hasSize(targetManagement.findByRsql(PAGE, query).getContent().size()); + .hasSize(targetManagement.findByRsql(PAGE, query).getContent().size()) + .as("has number of elements") + .isEmpty(); } @Step @@ -537,11 +537,13 @@ private void verifyThat0TargetsWithNameOrdescAndDSHaveTag(final TargetTag targTa targTagX.getName()); final String query = "(name==*targ-C* or description==*targ-C*) and tag==" + targTagX.getName() + " and (assignedds.name==" + setA.getName() + " or installedds.name==" + setA.getName() + ")"; - assertThat(targetManagement.findByFilters(PAGE, filterParams).getContent()).as("has number of elements") - .hasSize(0).as("that number is also returned by count query") + assertThat(targetManagement.findByFilters(PAGE, filterParams).getContent()) + .as("that number is also returned by count query") .hasSize((int) targetManagement.countByFilters(filterParams)) .as("and filter query returns the same result") - .hasSize(targetManagement.findByRsql(PAGE, query).getContent().size()); + .hasSize(targetManagement.findByRsql(PAGE, query).getContent().size()) + .as("has number of elements") + .isEmpty(); } @Step @@ -550,11 +552,12 @@ private void verifyThat0TargetsWithTagAndDescOrNameHasDS(final TargetTag targTag targTagW.getName()); final String query = "(name==*targ-A* or description==*targ-A*) and tag==" + targTagW.getName() + " and (assignedds.name==" + setA.getName() + " or installedds.name==" + setA.getName() + ")"; - assertThat(targetManagement.findByFilters(PAGE, filterParams).getContent()).as("has number of elements") - .hasSize(0).as("that number is also returned by count query") + assertThat(targetManagement.findByFilters(PAGE, filterParams).getContent()) .hasSize((int) targetManagement.countByFilters(filterParams)) .as("and filter query returns the same result") - .hasSize(targetManagement.findByRsql(PAGE, query).getContent().size()); + .hasSize(targetManagement.findByRsql(PAGE, query).getContent().size()) + .as("has number of elements") + .isEmpty(); } @Step diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementSecurityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementSecurityTest.java index a68bc0ca7e..d40dd2fca8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementSecurityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementSecurityTest.java @@ -25,7 +25,7 @@ @Slf4j @Feature("SecurityTests - TargetManagement") @Story("SecurityTests TargetManagement") -public class TargetManagementSecurityTest extends AbstractJpaIntegrationTest { +class TargetManagementSecurityTest extends AbstractJpaIntegrationTest { @Test @Description("Tests ManagementAPI PreAuthorized method with correct and insufficient permissions.") diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java index 15dae5d693..86fcfe5ffb 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java @@ -260,13 +260,12 @@ void assignAndUnassignTargetsToTag() { final TargetTag targetTag = targetTagManagement.create(entityFactory.tag().create().name("Tag1")); final List assignedTargets = targetManagement.assignTag(assignTarget, targetTag.getId()); - assertThat(assignedTargets.size()).as("Assigned targets are wrong").isEqualTo(4); - assignedTargets.forEach(target -> assertThat( - getTargetTags(target.getControllerId()).size()).isEqualTo(1)); + assertThat(assignedTargets).as("Assigned targets are wrong").hasSize(4); + assignedTargets.forEach(target -> assertThat(getTargetTags(target.getControllerId())).hasSize(1)); final TargetTag findTargetTag = targetTagManagement.getByName("Tag1").orElseThrow(IllegalStateException::new); - assertThat(assignedTargets.size()).as("Assigned targets are wrong") - .isEqualTo(targetManagement.findByTag(PAGE, targetTag.getId()).getNumberOfElements()); + assertThat(assignedTargets).as("Assigned targets are wrong") + .hasSize(targetManagement.findByTag(PAGE, targetTag.getId()).getNumberOfElements()); final Target unAssignTarget = targetManagement.unassignTag(List.of("targetId123"), findTargetTag.getId()).get(0); assertThat(unAssignTarget.getControllerId()).as("Controller id is wrong").isEqualTo("targetId123"); @@ -692,7 +691,7 @@ void findTargetsWithNoTag() { .findByFilters(PAGE, new FilterParams(null, null, null, null, Boolean.TRUE, tagNames)).getContent(); assertThat(targetManagement.count()).as("Total targets").isEqualTo(50L); - assertThat(targetsListWithNoTag.size()).as("Targets with no tag").isEqualTo(25); + assertThat(targetsListWithNoTag).as("Targets with no tag").hasSize(25); } @@ -1412,7 +1411,7 @@ private JpaTargetMetadata insertTargetMetadata(final String knownKey, final Stri private void checkTargetsHaveType(final List targets, final TargetType type) { final List foundTargets = targetRepository - .findAllById(targets.stream().map(Identifiable::getId).collect(Collectors.toList())); + .findAllById(targets.stream().map(Identifiable::getId).toList()); for (final Target target : foundTargets) { if (!type.getName().equals(type.getName())) { fail(String.format("Target %s is not of type %s.", target, type)); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementSecurityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementSecurityTest.java index 6cc9505943..bd9caf4f2c 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementSecurityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementSecurityTest.java @@ -22,7 +22,7 @@ @Slf4j @Feature("SecurityTests - TargetTagManagement") @Story("SecurityTests TargetTagManagement") -public class TargetTagManagementSecurityTest extends AbstractJpaIntegrationTest { +class TargetTagManagementSecurityTest extends AbstractJpaIntegrationTest { @Test @Description("Tests ManagementAPI PreAuthorized method with correct and insufficient permissions.") diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementTest.java index 58998d0f42..1b623c0f69 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetTagManagementTest.java @@ -19,7 +19,6 @@ import java.util.Collections; import java.util.List; import java.util.Random; -import java.util.stream.Collectors; import jakarta.validation.ConstraintViolationException; @@ -58,7 +57,7 @@ class TargetTagManagementTest extends AbstractJpaIntegrationTest { void failOnMissingDs() { final Collection group = testdataFactory.createTargets(5).stream() .map(Target::getControllerId) - .collect(Collectors.toList()); + .toList(); final TargetTag tag = targetTagManagement.create(entityFactory.tag().create().name("tag1").description("tagdesc1")); final List missing = new ArrayList<>(); @@ -75,12 +74,10 @@ void failOnMissingDs() { final Collection withMissing = concat(group, missing); assertThatThrownBy(() -> targetManagement.assignTag(withMissing, tag.getId())) .matches(e -> { - if (e instanceof EntityNotFoundException enfe) { - if (enfe.getInfo().get(EntityNotFoundException.TYPE).equals(Target.class.getSimpleName())) { - if (enfe.getInfo().get(EntityNotFoundException.ENTITY_ID) instanceof Collection entityId) { - return entityId.stream().sorted().toList().equals(missing); - } - } + if (e instanceof EntityNotFoundException enfe + && enfe.getInfo().get(EntityNotFoundException.TYPE).equals(Target.class.getSimpleName()) + && enfe.getInfo().get(EntityNotFoundException.ENTITY_ID) instanceof Collection entityId) { + return entityId.stream().sorted().toList().equals(missing); } return false; }); @@ -99,7 +96,7 @@ void nonExistingEntityAccessReturnsNotPresent() { @Description("Verifies that management queries react as specfied on calls for non existing entities " + " by means of throwing EntityNotFoundException.") @ExpectEvents({ - @Expect(type = DistributionSetTagUpdatedEvent.class), + @Expect(type = DistributionSetTagUpdatedEvent.class), @Expect(type = TargetTagUpdatedEvent.class) }) void entityQueriesReferringToNotExistingEntitiesThrowsException() { verifyThrownExceptionBy(() -> targetTagManagement.delete(NOT_EXIST_ID), "TargetTag"); @@ -126,9 +123,10 @@ void assignAndUnassignTargetTags() { // toggle A only -> A is now assigned List result = assignTag(groupA, tag); - assertThat(result).size().isEqualTo(20); - assertThat(result).containsAll( - targetManagement.getByControllerID(groupA.stream().map(Target::getControllerId).collect(Collectors.toList()))); + assertThat(result) + .containsAll( + targetManagement.getByControllerID(groupA.stream().map(Target::getControllerId).toList())) + .size().isEqualTo(20); assertThat(targetManagement.findByTag(Pageable.unpaged(), tag.getId()).getContent().stream().map(Target::getControllerId).sorted() .toList()) .isEqualTo(groupA.stream().map(Target::getControllerId).sorted().toList()); @@ -136,18 +134,19 @@ void assignAndUnassignTargetTags() { // toggle A+B -> A is still assigned and B is assigned as well final Collection groupAB = concat(groupA, groupB); result = assignTag(groupAB, tag); - assertThat(result).size().isEqualTo(40); - assertThat(result).containsAll( - targetManagement.getByControllerID(groupAB.stream().map(Target::getControllerId).collect(Collectors.toList()))); + assertThat(result) + .containsAll( + targetManagement.getByControllerID(groupAB.stream().map(Target::getControllerId).toList())) + .size().isEqualTo(40); assertThat(targetManagement.findByTag(Pageable.unpaged(), tag.getId()).getContent().stream().map(Target::getControllerId).sorted() .toList()) .isEqualTo(groupAB.stream().map(Target::getControllerId).sorted().toList()); // toggle A+B -> both unassigned result = unassignTag(groupAB, tag); - assertThat(result).size().isEqualTo(40); - assertThat(result).containsAll( - targetManagement.getByControllerID(groupAB.stream().map(Target::getControllerId).collect(Collectors.toList()))); + assertThat(result) + .containsAll(targetManagement.getByControllerID(groupAB.stream().map(Target::getControllerId).toList())) + .size().isEqualTo(40); assertThat(targetManagement.findByTag(Pageable.unpaged(), tag.getId()).getContent()).isEmpty(); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/specifications/SpecificationsBuilderTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/specifications/SpecificationsBuilderTest.java index 681240352f..fc32ec1d3d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/specifications/SpecificationsBuilderTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/specifications/SpecificationsBuilderTest.java @@ -35,18 +35,18 @@ @Feature("Unit Tests - Repository") @Story("Specifications builder") -public class SpecificationsBuilderTest { +class SpecificationsBuilderTest { @Test @Description("Test the combination of specs on an empty list which returns null") - public void combineWithAndEmptyList() { + void combineWithAndEmptyList() { final List> specList = Collections.emptyList(); assertThat(SpecificationsBuilder.combineWithAnd(specList)).isNull(); } @Test @Description("Test the combination of specs on an immutable list with one entry") - public void combineWithAndSingleImmutableList() { + void combineWithAndSingleImmutableList() { final Specification spec = (root, query, cb) -> cb.equal(root.get("field1"), "testValue"); final List> specList = Collections.singletonList(spec); final Specification specifications = SpecificationsBuilder.combineWithAnd(specList); @@ -70,7 +70,7 @@ public void combineWithAndSingleImmutableList() { @Test @Description("Test the combination of specs on a list with multiple entries") - public void combineWithAndList() { + void combineWithAndList() { final Specification spec1 = (root, query, cb) -> cb.equal(root.get("field1"), "testValue1"); final Specification spec2 = (root, query, cb) -> cb.equal(root.get("field2"), "testValue2"); @@ -93,7 +93,7 @@ public void combineWithAndList() { when(criteriaBuilder.equal(any(Path.class), eq("testValue1"))).thenReturn(equalPredicate1); when(criteriaBuilder.equal(any(Path.class), eq("testValue2"))).thenReturn(equalPredicate2); - when(criteriaBuilder.and(eq(equalPredicate1), eq(equalPredicate2))).thenReturn(combinedPredicate); + when(criteriaBuilder.and(equalPredicate1, equalPredicate2)).thenReturn(combinedPredicate); when(root.get("field1")).thenReturn(field1); when(root.get("field2")).thenReturn(field2); diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/SecurityContextSwitch.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/SecurityContextSwitch.java index 906adf5d40..7c87ce62f5 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/SecurityContextSwitch.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/SecurityContextSwitch.java @@ -92,6 +92,7 @@ private static WithUser createWithUser( } // should be used only for test purposes and taking in account 'annotation' non-transient field in a Serializable + @SuppressWarnings("java:S1948") // java:S1948 - see comments into the method static class WithUserSecurityContext implements SecurityContext { @Serial diff --git a/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpRole.java b/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpRole.java index 343dee9829..bff5201fa2 100644 --- a/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpRole.java +++ b/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/SpRole.java @@ -58,7 +58,7 @@ public final class SpRole { public static final String SYSTEM_ADMIN_HIERARCHY = SpPermission.SYSTEM_ADMIN + IMPLIES + TENANT_ADMIN + LINE_BREAK; - public static String DEFAULT_ROLE_HIERARCHY = + public static final String DEFAULT_ROLE_HIERARCHY = TARGET_ADMIN_HIERARCHY + REPOSITORY_ADMIN_HIERARCHY + ROLLOUT_ADMIN_HIERARCHY + diff --git a/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/StaticAuthenticationProvider.java b/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/StaticAuthenticationProvider.java index ce7acbf964..2cc8a5d700 100644 --- a/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/StaticAuthenticationProvider.java +++ b/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/StaticAuthenticationProvider.java @@ -128,8 +128,8 @@ public UserDetails loadUserByUsername(final String username) { } private static User clone(final User user) { - if (user instanceof TenantAwareUser) { - return new TenantAwareUser(user.getUsername(), user.getPassword(), user.getAuthorities(), ((TenantAwareUser) user).getTenant()); + if (user instanceof TenantAwareUser tenantAwareUser) { + return new TenantAwareUser(user.getUsername(), user.getPassword(), user.getAuthorities(), tenantAwareUser.getTenant()); } else { return new User(user.getUsername(), user.getPassword(), user.getAuthorities()); } diff --git a/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextSerializer.java b/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextSerializer.java index 28b5b63b97..222ba5b332 100644 --- a/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextSerializer.java +++ b/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SecurityContextSerializer.java @@ -17,6 +17,8 @@ import java.util.Base64; import java.util.Objects; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import org.springframework.security.core.context.SecurityContext; public interface SecurityContextSerializer { @@ -74,11 +76,10 @@ public SecurityContext deserialize(String securityContextString) { /** * Implementation based on the java serialization. */ + @NoArgsConstructor(access = AccessLevel.PRIVATE) + @SuppressWarnings("java:S112") // accepted class JavaSerialization implements SecurityContextSerializer { - private JavaSerialization() { - } - @Override public String serialize(final SecurityContext securityContext) { Objects.requireNonNull(securityContext); diff --git a/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SpringSecurityAuditorAware.java b/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SpringSecurityAuditorAware.java index b7615c20f0..94d05a8248 100644 --- a/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SpringSecurityAuditorAware.java +++ b/hawkbit-security/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/security/SpringSecurityAuditorAware.java @@ -62,11 +62,11 @@ protected String getCurrentAuditor(final Authentication authentication) { if (authentication.getDetails() instanceof TenantAwareAuthenticationDetails tenantAwareDetails && tenantAwareDetails.isController()) { return "CONTROLLER_PLUG_AND_PLAY"; } - if (authentication.getPrincipal() instanceof UserDetails) { - return ((UserDetails) authentication.getPrincipal()).getUsername(); + if (authentication.getPrincipal() instanceof UserDetails userDetails) { + return userDetails.getUsername(); } - if (authentication.getPrincipal() instanceof OidcUser) { - return ((OidcUser) authentication.getPrincipal()).getPreferredUsername(); + if (authentication.getPrincipal() instanceof OidcUser oidcUser) { + return oidcUser.getPreferredUsername(); } return authentication.getPrincipal().toString(); } diff --git a/hawkbit-security/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/SpPermissionTest.java b/hawkbit-security/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/SpPermissionTest.java index 3b4e01275e..965c9a19c2 100644 --- a/hawkbit-security/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/SpPermissionTest.java +++ b/hawkbit-security/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/SpPermissionTest.java @@ -26,7 +26,7 @@ */ @Feature("Unit Tests - Security") @Story("Permission Test") -public final class SpPermissionTest { +final class SpPermissionTest { @Test @Description("Try to double check if all permissions works as expected") @@ -42,7 +42,8 @@ void shouldReturnAllPermissions() { } }); final Collection allAuthorities = SpPermission.getAllAuthorities(); - assertThat(allAuthorities).hasSize(20); - assertThat(allAuthorities).containsAll(expected); + assertThat(allAuthorities) + .hasSize(20) + .containsAll(expected); } } \ No newline at end of file diff --git a/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/util/SelectionGrid.java b/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/util/SelectionGrid.java index 0ef4f538f4..57bbd0342b 100644 --- a/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/util/SelectionGrid.java +++ b/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/util/SelectionGrid.java @@ -22,6 +22,7 @@ import com.vaadin.flow.theme.lumo.LumoUtility; // id type shall have proper equals and hashCode - i.e. eligible hash set element +@SuppressWarnings("java:S119") // better readability public class SelectionGrid extends Grid { private volatile String rsqlFilter; @@ -80,7 +81,7 @@ public void refreshGrid(final boolean keepSelection) { } } - public static abstract class EntityRepresentation { + public abstract static class EntityRepresentation { private final Class beanType; private final Function idFn; diff --git a/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/util/TableView.java b/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/util/TableView.java index ec9876bda9..cfb80f11dc 100644 --- a/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/util/TableView.java +++ b/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/util/TableView.java @@ -19,6 +19,7 @@ import com.vaadin.flow.data.provider.Query; import org.eclipse.hawkbit.ui.simple.view.Constants; +@SuppressWarnings("java:S119") // better readability public class TableView extends Div implements Constants { protected SelectionGrid selectionGrid;