Sonar Fixes (10) (#2222)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
This commit is contained in:
@@ -102,28 +102,42 @@ public class DdiRootController implements DdiRootControllerRestApi {
|
||||
* File suffix for MDH hash download (see Linux md5sum).
|
||||
*/
|
||||
private static final String ARTIFACT_MD5_DWNL_SUFFIX = ".MD5SUM";
|
||||
@Autowired
|
||||
private ConfirmationManagement confirmationManagement;
|
||||
@Autowired
|
||||
private ApplicationEventPublisher eventPublisher;
|
||||
@Autowired(required = false)
|
||||
|
||||
private final ControllerManagement controllerManagement;
|
||||
private final ConfirmationManagement confirmationManagement;
|
||||
private final ArtifactManagement artifactManagement;
|
||||
private final ArtifactUrlHandler artifactUrlHandler;
|
||||
private final SystemManagement systemManagement;
|
||||
private final ApplicationEventPublisher eventPublisher;
|
||||
private final BusProperties bus;
|
||||
private final HawkbitSecurityProperties securityProperties;
|
||||
private final TenantAware tenantAware;
|
||||
private final EntityFactory entityFactory;
|
||||
private ServiceMatcher serviceMatcher;
|
||||
@Autowired
|
||||
private BusProperties bus;
|
||||
@Autowired
|
||||
private ControllerManagement controllerManagement;
|
||||
@Autowired
|
||||
private ArtifactManagement artifactManagement;
|
||||
@Autowired
|
||||
private HawkbitSecurityProperties securityProperties;
|
||||
@Autowired
|
||||
private TenantAware tenantAware;
|
||||
@Autowired
|
||||
private SystemManagement systemManagement;
|
||||
@Autowired
|
||||
private ArtifactUrlHandler artifactUrlHandler;
|
||||
@Autowired
|
||||
private EntityFactory entityFactory;
|
||||
|
||||
@SuppressWarnings("java:S107")
|
||||
public DdiRootController(
|
||||
final ControllerManagement controllerManagement, final ConfirmationManagement confirmationManagement,
|
||||
final ArtifactManagement artifactManagement, final ArtifactUrlHandler artifactUrlHandler,
|
||||
final SystemManagement systemManagement,
|
||||
final ApplicationEventPublisher eventPublisher, final BusProperties bus,
|
||||
final HawkbitSecurityProperties securityProperties, final TenantAware tenantAware, final EntityFactory entityFactory) {
|
||||
this.controllerManagement = controllerManagement;
|
||||
this.confirmationManagement = confirmationManagement;
|
||||
this.artifactManagement = artifactManagement;
|
||||
this.artifactUrlHandler = artifactUrlHandler;
|
||||
this.systemManagement = systemManagement;
|
||||
this.eventPublisher = eventPublisher;
|
||||
this.bus = bus;
|
||||
this.securityProperties = securityProperties;
|
||||
this.tenantAware = tenantAware;
|
||||
this.entityFactory = entityFactory;
|
||||
}
|
||||
|
||||
@Autowired(required = false)
|
||||
public void setServiceMatcher(final ServiceMatcher serviceMatcher) {
|
||||
this.serviceMatcher = serviceMatcher;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<List<DdiArtifact>> getSoftwareModulesArtifacts(
|
||||
|
||||
@@ -114,6 +114,7 @@ public class AmqpMessageDispatcherService extends BaseAmqpService {
|
||||
* @param distributionSetManagement to retrieve modules
|
||||
* @param tenantConfigurationManagement to access tenant configuration
|
||||
*/
|
||||
@SuppressWarnings("java:S107")
|
||||
protected AmqpMessageDispatcherService(
|
||||
final RabbitTemplate rabbitTemplate,
|
||||
final AmqpMessageSenderService amqpSenderService, final ArtifactUrlHandler artifactUrlHandler,
|
||||
|
||||
@@ -24,28 +24,27 @@ import org.springframework.util.ErrorHandler;
|
||||
@Story("Delegating Conditional Error Handler")
|
||||
class DelegatingAmqpErrorHandlerTest {
|
||||
|
||||
private final DelegatingConditionalErrorHandler delegatingConditionalErrorHandler =
|
||||
new DelegatingConditionalErrorHandler(
|
||||
List.of(new IllegalArgumentExceptionHandler(), new IndexOutOfBoundsExceptionHandler()),
|
||||
new DefaultErrorHandler());
|
||||
|
||||
@Test
|
||||
@Description("Verifies that with a list of conditional error handlers, the error is delegated to specific handler.")
|
||||
void verifyDelegationHandling() {
|
||||
List<AmqpErrorHandler> handlers = new ArrayList<>();
|
||||
handlers.add(new IllegalArgumentExceptionHandler());
|
||||
handlers.add(new IndexOutOfBoundsExceptionHandler());
|
||||
final Throwable error = new Throwable(new IllegalArgumentException());
|
||||
assertThatExceptionOfType(IllegalArgumentException.class)
|
||||
.as("Expected handled exception to be of type IllegalArgumentException")
|
||||
.isThrownBy(() -> new DelegatingConditionalErrorHandler(handlers, new DefaultErrorHandler())
|
||||
.handleError(new Throwable(new IllegalArgumentException())));
|
||||
.isThrownBy(() -> delegatingConditionalErrorHandler.handleError(error));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Description("Verifies that default handler is used if no handlers are defined for the specific exception.")
|
||||
void verifyDefaultDelegationHandling() {
|
||||
List<AmqpErrorHandler> handlers = new ArrayList<>();
|
||||
handlers.add(new IllegalArgumentExceptionHandler());
|
||||
handlers.add(new IndexOutOfBoundsExceptionHandler());
|
||||
final Throwable error = new Throwable(new NullPointerException());
|
||||
assertThatExceptionOfType(RuntimeException.class)
|
||||
.as("Expected handled exception to be of type RuntimeException")
|
||||
.isThrownBy(() -> new DelegatingConditionalErrorHandler(handlers, new DefaultErrorHandler())
|
||||
.handleError(new Throwable(new NullPointerException())));
|
||||
.isThrownBy(() -> delegatingConditionalErrorHandler.handleError(error));
|
||||
}
|
||||
|
||||
// Test class
|
||||
@@ -82,4 +81,4 @@ class DelegatingAmqpErrorHandlerTest {
|
||||
throw new RuntimeException(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -64,28 +64,34 @@ public class DeprecatedMgmtResource implements DeprecatedMgmtRestApi {
|
||||
// logger that logs usage of deprecated API
|
||||
private static final Logger DEPRECATED_USAGE_LOGGER = LoggerFactory.getLogger("DEPRECATED_USAGE");
|
||||
|
||||
@Autowired
|
||||
private DistributionSetRepository distributionSetRepository;
|
||||
@Autowired
|
||||
private DistributionSetTagManagement distributionSetTagManagement;
|
||||
@Autowired
|
||||
private DistributionSetManagement distributionSetManagement;
|
||||
@Autowired
|
||||
private TargetRepository targetRepository;
|
||||
@Autowired
|
||||
private TargetTagRepository targetTagRepository;
|
||||
@Autowired
|
||||
private TargetManagement targetManagement;
|
||||
@Autowired
|
||||
private TargetTagManagement targetTagManagement;
|
||||
@Autowired
|
||||
private PlatformTransactionManager txManager;
|
||||
@Autowired
|
||||
private EntityManager entityManager;
|
||||
|
||||
private final DistributionSetRepository distributionSetRepository;
|
||||
private final DistributionSetTagManagement distributionSetTagManagement;
|
||||
private final DistributionSetManagement distributionSetManagement;
|
||||
private final TargetRepository targetRepository;
|
||||
private final TargetTagRepository targetTagRepository;
|
||||
private final TargetManagement targetManagement;
|
||||
private final TargetTagManagement targetTagManagement;
|
||||
private final PlatformTransactionManager txManager;
|
||||
private final EntityManager entityManager;
|
||||
private final TenantConfigHelper tenantConfigHelper;
|
||||
|
||||
DeprecatedMgmtResource(final SystemSecurityContext securityContext, final TenantConfigurationManagement configurationManagement) {
|
||||
@SuppressWarnings("squid:S107")
|
||||
DeprecatedMgmtResource(
|
||||
final DistributionSetRepository distributionSetRepository, final DistributionSetTagManagement distributionSetTagManagement,
|
||||
final DistributionSetManagement distributionSetManagement,
|
||||
final TargetRepository targetRepository, final TargetTagRepository targetTagRepository, final TargetManagement targetManagement,
|
||||
final TargetTagManagement targetTagManagement,
|
||||
final PlatformTransactionManager txManager, final EntityManager entityManager,
|
||||
final SystemSecurityContext securityContext, final TenantConfigurationManagement configurationManagement) {
|
||||
this.distributionSetRepository = distributionSetRepository;
|
||||
this.distributionSetTagManagement = distributionSetTagManagement;
|
||||
this.distributionSetManagement = distributionSetManagement;
|
||||
this.targetRepository = targetRepository;
|
||||
this.targetTagRepository = targetTagRepository;
|
||||
this.targetManagement = targetManagement;
|
||||
this.targetTagManagement = targetTagManagement;
|
||||
this.txManager = txManager;
|
||||
this.entityManager = entityManager;
|
||||
tenantConfigHelper = TenantConfigHelper.usingContext(securityContext, configurationManagement);
|
||||
}
|
||||
|
||||
@@ -180,12 +186,12 @@ public class DeprecatedMgmtResource implements DeprecatedMgmtRestApi {
|
||||
result = new DistributionSetTagAssignmentResult(ids.size() - toBeChangedDSs.size(),
|
||||
Collections.emptyList(),
|
||||
Collections.unmodifiableList(
|
||||
toBeChangedDSs.stream().map(distributionSetRepository::save).collect(Collectors.toList())),
|
||||
toBeChangedDSs.stream().map(distributionSetRepository::save).toList()),
|
||||
distributionSetTag);
|
||||
} else {
|
||||
result = new DistributionSetTagAssignmentResult(ids.size() - toBeChangedDSs.size(),
|
||||
Collections.unmodifiableList(
|
||||
toBeChangedDSs.stream().map(distributionSetRepository::save).collect(Collectors.toList())),
|
||||
toBeChangedDSs.stream().map(distributionSetRepository::save).toList()),
|
||||
Collections.emptyList(), distributionSetTag);
|
||||
}
|
||||
return result;
|
||||
@@ -247,7 +253,7 @@ public class DeprecatedMgmtResource implements DeprecatedMgmtRestApi {
|
||||
private static List<Long> findDistributionSetIds(
|
||||
final List<MgmtAssignedDistributionSetRequestBody> assignedDistributionSetRequestBodies) {
|
||||
return assignedDistributionSetRequestBodies.stream()
|
||||
.map(MgmtAssignedDistributionSetRequestBody::getDistributionSetId).collect(Collectors.toList());
|
||||
.map(MgmtAssignedDistributionSetRequestBody::getDistributionSetId).toList();
|
||||
}
|
||||
|
||||
private DistributionSetTag findDistributionTagById(final Long distributionsetTagId) {
|
||||
@@ -257,7 +263,6 @@ public class DeprecatedMgmtResource implements DeprecatedMgmtRestApi {
|
||||
|
||||
private List<String> findTargetControllerIds(
|
||||
final List<MgmtAssignedTargetRequestBody> assignedTargetRequestBodies) {
|
||||
return assignedTargetRequestBodies.stream().map(MgmtAssignedTargetRequestBody::getControllerId)
|
||||
.collect(Collectors.toList());
|
||||
return assignedTargetRequestBodies.stream().map(MgmtAssignedTargetRequestBody::getControllerId).toList();
|
||||
}
|
||||
}
|
||||
@@ -37,16 +37,17 @@ import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
/**
|
||||
* REST Resource handling for DistributionSetTag CRUD operations.
|
||||
*
|
||||
* @deprecated since 0.6.0
|
||||
*/
|
||||
// no request mapping specified here to avoid CVE-2021-22044 in Feign client
|
||||
@Deprecated(forRemoval = true)
|
||||
@Deprecated(forRemoval = true, since = "0.6.0")
|
||||
@Tag(name = "Deprecated operations", description = "Deprecated REST operations.",
|
||||
extensions = @Extension(name = OpenApiConfiguration.X_HAWKBIT, properties = @ExtensionProperty(name = "order", value = "2147483647")))
|
||||
public interface DeprecatedMgmtRestApi {
|
||||
|
||||
/**
|
||||
* Handles the POST request to toggle the assignment of distribution sets by
|
||||
* the given tag id.</br>
|
||||
* Handles the POST request to toggle the assignment of distribution sets by the given tag id.</br>
|
||||
* From {@link org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTagRestApi}
|
||||
*
|
||||
* @param distributionsetTagId the ID of the distribution set tag to retrieve
|
||||
|
||||
@@ -67,11 +67,11 @@ public class ArtifactUpload {
|
||||
* @param filename of the artifact
|
||||
* @param providedSha1Sum optional sha1 checksum to check the new file against
|
||||
* @param providedMd5Sum optional md5 checksum to check the new file against
|
||||
* @param overrideExisting to <code>true</code> if the artifact binary can be overridden
|
||||
* if it already exists
|
||||
* @param overrideExisting to <code>true</code> if the artifact binary can be overridden if it already exists
|
||||
* @param contentType the contentType of the file
|
||||
* @param filesize the size of the file in bytes.
|
||||
*/
|
||||
@SuppressWarnings("java:S107")
|
||||
public ArtifactUpload(final InputStream inputStream, final long moduleId, final String filename,
|
||||
final String providedMd5Sum, final String providedSha1Sum, final String providedSha256Sum,
|
||||
final boolean overrideExisting, final String contentType, final long filesize) {
|
||||
|
||||
@@ -56,6 +56,7 @@ public class DeploymentRequest {
|
||||
* with CONFIRMATION_FLOW active via tenant configuration)
|
||||
* @throws InvalidMaintenanceScheduleException if the parameters do not define a valid maintenance schedule.
|
||||
*/
|
||||
@SuppressWarnings("java:S107")
|
||||
public DeploymentRequest(final String controllerId, final Long distributionSetId, final ActionType actionType,
|
||||
final long forceTime, final Integer weight, final String maintenanceSchedule,
|
||||
final String maintenanceWindowDuration, final String maintenanceWindowTimeZone,
|
||||
|
||||
@@ -16,8 +16,8 @@ import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaBaseEntity_;
|
||||
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.JpaTarget;
|
||||
import org.eclipse.hawkbit.repository.jpa.repository.ActionRepository;
|
||||
@@ -59,7 +59,7 @@ public final class DeploymentHelper {
|
||||
|
||||
final JpaTarget target = (JpaTarget) action.getTarget();
|
||||
final List<Action> nextActiveActions = actionRepository
|
||||
.findAll(ActionSpecifications.byTargetIdAndIsActive(target.getId()), Sort.by(Sort.Order.asc(JpaAction_.ID)))
|
||||
.findAll(ActionSpecifications.byTargetIdAndIsActive(target.getId()), Sort.by(Sort.Order.asc(AbstractJpaBaseEntity_.ID)))
|
||||
.stream()
|
||||
.filter(a -> !a.getId().equals(action.getId()))
|
||||
.map(Action.class::cast)
|
||||
|
||||
@@ -35,7 +35,7 @@ import org.eclipse.hawkbit.repository.jpa.specifications.TargetSpecifications;
|
||||
import org.eclipse.hawkbit.repository.model.Action;
|
||||
import org.eclipse.hawkbit.repository.model.DistributionSet;
|
||||
import org.eclipse.hawkbit.repository.model.DistributionSetFilter;
|
||||
import org.eclipse.hawkbit.repository.model.DistributionSetTag;
|
||||
import org.eclipse.hawkbit.repository.model.MetaData;
|
||||
import org.eclipse.hawkbit.repository.model.SoftwareModule;
|
||||
import org.eclipse.hawkbit.repository.model.TargetFilterQuery;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -68,53 +68,53 @@ class DistributionSetAccessControllerTest extends AbstractAccessControllerTest {
|
||||
TargetSpecifications.hasId(permittedAction.getTarget().getId()),
|
||||
target -> target.getId().equals(permittedAction.getTarget().getId()));
|
||||
|
||||
final Long permittedActionId = permitted.getId();
|
||||
|
||||
// verify distributionSetManagement#findAll
|
||||
assertThat(distributionSetManagement.findAll(Pageable.unpaged()).get().map(Identifiable::getId).toList())
|
||||
.containsOnly(permitted.getId());
|
||||
.containsOnly(permittedActionId);
|
||||
|
||||
// verify distributionSetManagement#findByRsql
|
||||
assertThat(distributionSetManagement.findByRsql("name==*", Pageable.unpaged()).get().map(Identifiable::getId)
|
||||
.toList()).containsOnly(permitted.getId());
|
||||
.toList()).containsOnly(permittedActionId);
|
||||
|
||||
// verify distributionSetManagement#findByCompleted
|
||||
assertThat(distributionSetManagement.findByCompleted(Pageable.unpaged(), true).get().map(Identifiable::getId)
|
||||
.toList()).containsOnly(permitted.getId());
|
||||
.toList()).containsOnly(permittedActionId);
|
||||
|
||||
// verify distributionSetManagement#findByDistributionSetFilter
|
||||
assertThat(distributionSetManagement
|
||||
.findByDistributionSetFilter(DistributionSetFilter.builder().isDeleted(false).build(), Pageable.unpaged()
|
||||
)
|
||||
.get().map(Identifiable::getId).toList()).containsOnly(permitted.getId());
|
||||
.findByDistributionSetFilter(DistributionSetFilter.builder().isDeleted(false).build(), Pageable.unpaged())
|
||||
.get().map(Identifiable::getId).toList()).containsOnly(permittedActionId);
|
||||
|
||||
// verify distributionSetManagement#get
|
||||
assertThat(distributionSetManagement.get(permitted.getId())).isPresent();
|
||||
assertThat(distributionSetManagement.get(hidden.getId())).isEmpty();
|
||||
assertThat(distributionSetManagement.get(permittedActionId)).isPresent();
|
||||
final Long hiddenId = hidden.getId();
|
||||
assertThat(distributionSetManagement.get(hiddenId)).isEmpty();
|
||||
|
||||
// verify distributionSetManagement#getWithDetails
|
||||
assertThat(distributionSetManagement.getWithDetails(permitted.getId())).isPresent();
|
||||
assertThat(distributionSetManagement.getWithDetails(hidden.getId())).isEmpty();
|
||||
assertThat(distributionSetManagement.getWithDetails(permittedActionId)).isPresent();
|
||||
assertThat(distributionSetManagement.getWithDetails(hiddenId)).isEmpty();
|
||||
|
||||
// verify distributionSetManagement#get
|
||||
assertThat(distributionSetManagement.getValid(permitted.getId()).getId()).isEqualTo(permitted.getId());
|
||||
assertThatThrownBy(() -> {
|
||||
assertThat(distributionSetManagement.getValid(hidden.getId()));
|
||||
}).as("Distribution set should not be found.").isInstanceOf(EntityNotFoundException.class);
|
||||
assertThat(distributionSetManagement.getValid(permittedActionId).getId()).isEqualTo(permittedActionId);
|
||||
assertThatThrownBy(() -> distributionSetManagement.getValid(hiddenId))
|
||||
.as("Distribution set should not be found.").isInstanceOf(EntityNotFoundException.class);
|
||||
|
||||
// verify distributionSetManagement#get
|
||||
assertThatThrownBy(() -> {
|
||||
distributionSetManagement.get(Arrays.asList(permitted.getId(), hidden.getId()));
|
||||
}).as("Fail if request hidden.").isInstanceOf(EntityNotFoundException.class);
|
||||
final List<Long> allActionIds = Arrays.asList(permittedActionId, hiddenId);
|
||||
assertThatThrownBy(() -> distributionSetManagement.get(allActionIds))
|
||||
.as("Fail if request hidden.").isInstanceOf(EntityNotFoundException.class);
|
||||
|
||||
// verify distributionSetManagement#getByNameAndVersion
|
||||
assertThat(distributionSetManagement.findByNameAndVersion(permitted.getName(), permitted.getVersion()))
|
||||
.isPresent();
|
||||
assertThat(distributionSetManagement.findByNameAndVersion(permitted.getName(), permitted.getVersion())).isPresent();
|
||||
assertThat(distributionSetManagement.findByNameAndVersion(hidden.getName(), hidden.getVersion())).isEmpty();
|
||||
|
||||
// verify distributionSetManagement#getByAction
|
||||
assertThat(distributionSetManagement.findByAction(permittedAction.getId())).isPresent();
|
||||
assertThatThrownBy(() -> {
|
||||
distributionSetManagement.findByAction(hiddenAction.getId());
|
||||
}).as("Action is hidden.").isInstanceOf(InsufficientPermissionException.class);
|
||||
final Long hiddenActionId = hiddenAction.getId();
|
||||
assertThatThrownBy(() -> distributionSetManagement.findByAction(hiddenActionId))
|
||||
.as("Action is hidden.").isInstanceOf(InsufficientPermissionException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -140,41 +140,46 @@ class DistributionSetAccessControllerTest extends AbstractAccessControllerTest {
|
||||
defineAccess(AccessController.Operation.UPDATE, permitted);
|
||||
|
||||
// verify distributionSetManagement#assignSoftwareModules
|
||||
assertThat(distributionSetManagement.assignSoftwareModules(permitted.getId(), Collections.singletonList(swModule.getId())))
|
||||
final var singleModuleIdList = Collections.singletonList(swModule.getId());
|
||||
assertThat(distributionSetManagement.assignSoftwareModules(permitted.getId(), singleModuleIdList))
|
||||
.satisfies(ds -> assertThat(ds.getModules().stream().map(Identifiable::getId).toList()).contains(swModule.getId()));
|
||||
assertThatThrownBy(() -> distributionSetManagement.assignSoftwareModules(readOnly.getId(), Collections.singletonList(swModule.getId())))
|
||||
final Long readOnlyId = readOnly.getId();
|
||||
assertThatThrownBy(() -> distributionSetManagement.assignSoftwareModules(readOnlyId, singleModuleIdList))
|
||||
.as("Distribution set not allowed to me modified.")
|
||||
.isInstanceOf(EntityNotFoundException.class);
|
||||
assertThatThrownBy(() -> distributionSetManagement.assignSoftwareModules(hidden.getId(), Collections.singletonList(swModule.getId())))
|
||||
final Long hiddenId = hidden.getId();
|
||||
assertThatThrownBy(() -> distributionSetManagement.assignSoftwareModules(hiddenId, singleModuleIdList))
|
||||
.as("Distribution set should not be visible.")
|
||||
.isInstanceOf(EntityNotFoundException.class);
|
||||
|
||||
final JpaDistributionSetMetadata metadata = new JpaDistributionSetMetadata("test", "test");
|
||||
|
||||
// verify distributionSetManagement#createMetaData
|
||||
distributionSetManagement.putMetaData(permitted.getId(), Collections.singletonList(metadata));
|
||||
assertThatThrownBy(() -> distributionSetManagement.putMetaData(readOnly.getId(), Collections.singletonList(metadata)))
|
||||
final List<MetaData> metadataList = Collections.singletonList(metadata);
|
||||
distributionSetManagement.putMetaData(permitted.getId(), metadataList);
|
||||
assertThatThrownBy(() -> distributionSetManagement.putMetaData(readOnlyId, metadataList))
|
||||
.as("Distribution set not allowed to me modified.")
|
||||
.isInstanceOf(EntityNotFoundException.class);
|
||||
assertThatThrownBy(() -> distributionSetManagement.putMetaData(hidden.getId(), Collections.singletonList(metadata)))
|
||||
assertThatThrownBy(() -> distributionSetManagement.putMetaData(hiddenId, metadataList))
|
||||
.as("Distribution set should not be visible.")
|
||||
.isInstanceOf(EntityNotFoundException.class);
|
||||
|
||||
// verify distributionSetManagement#updateMetaData
|
||||
distributionSetManagement.updateMetaData(permitted.getId(), metadata);
|
||||
assertThatThrownBy(() -> distributionSetManagement.updateMetaData(readOnly.getId(), metadata))
|
||||
assertThatThrownBy(() -> distributionSetManagement.updateMetaData(readOnlyId, metadata))
|
||||
.as("Distribution set not allowed to me modified.")
|
||||
.isInstanceOf(EntityNotFoundException.class);
|
||||
assertThatThrownBy(() -> distributionSetManagement.updateMetaData(hidden.getId(), metadata))
|
||||
assertThatThrownBy(() -> distributionSetManagement.updateMetaData(hiddenId, metadata))
|
||||
.as("Distribution set should not be visible.")
|
||||
.isInstanceOf(EntityNotFoundException.class);
|
||||
|
||||
// verify distributionSetManagement#deleteMetaData
|
||||
distributionSetManagement.deleteMetaData(permitted.getId(), metadata.getKey());
|
||||
assertThatThrownBy(() -> distributionSetManagement.deleteMetaData(readOnly.getId(), metadata.getKey()))
|
||||
final String metadataKey = metadata.getKey();
|
||||
distributionSetManagement.deleteMetaData(permitted.getId(), metadataKey);
|
||||
assertThatThrownBy(() -> distributionSetManagement.deleteMetaData(readOnlyId, metadataKey))
|
||||
.as("Distribution set not allowed to me modified.")
|
||||
.isInstanceOf(EntityNotFoundException.class);
|
||||
assertThatThrownBy(() -> distributionSetManagement.deleteMetaData(hidden.getId(), metadata.getKey()))
|
||||
assertThatThrownBy(() -> distributionSetManagement.deleteMetaData(hiddenId, metadataKey))
|
||||
.as("Distribution set should not be visible.")
|
||||
.isInstanceOf(EntityNotFoundException.class);
|
||||
}
|
||||
@@ -189,12 +194,12 @@ class DistributionSetAccessControllerTest extends AbstractAccessControllerTest {
|
||||
final DistributionSet permitted = testdataFactory.createDistributionSet();
|
||||
final DistributionSet readOnly = testdataFactory.createDistributionSet();
|
||||
final DistributionSet hidden = testdataFactory.createDistributionSet();
|
||||
final DistributionSetTag dsTag = distributionSetTagManagement.create(entityFactory.tag().create().name("dsTag"));
|
||||
final DistributionSetTag dsTag2 = distributionSetTagManagement.create(entityFactory.tag().create().name("dsTag2"));
|
||||
final Long dsTagId = distributionSetTagManagement.create(entityFactory.tag().create().name("dsTag")).getId();
|
||||
final Long dsTag2Id = distributionSetTagManagement.create(entityFactory.tag().create().name("dsTag2")).getId();
|
||||
|
||||
// perform tag assignment before setting access rules
|
||||
distributionSetManagement.assignTag(Arrays.asList(permitted.getId(), readOnly.getId(), hidden.getId()),
|
||||
dsTag.getId());
|
||||
dsTagId);
|
||||
// entities created - reset rules
|
||||
testAccessControlManger.deleteAllRules();
|
||||
|
||||
@@ -204,53 +209,55 @@ class DistributionSetAccessControllerTest extends AbstractAccessControllerTest {
|
||||
// allow updating the permitted distributionSet
|
||||
defineAccess(AccessController.Operation.UPDATE, permitted);
|
||||
|
||||
assertThat(distributionSetManagement.findByTag(dsTag.getId(), Pageable.unpaged()).get().map(Identifiable::getId)
|
||||
assertThat(distributionSetManagement.findByTag(dsTagId, Pageable.unpaged()).get().map(Identifiable::getId)
|
||||
.toList()).containsOnly(permitted.getId(), readOnly.getId());
|
||||
|
||||
assertThat(distributionSetManagement.findByRsqlAndTag("name==*", dsTag.getId(), Pageable.unpaged()).get()
|
||||
assertThat(distributionSetManagement.findByRsqlAndTag("name==*", dsTagId, Pageable.unpaged()).get()
|
||||
.map(Identifiable::getId).toList()).containsOnly(permitted.getId(), readOnly.getId());
|
||||
|
||||
// verify distributionSetManagement#unassignTag on permitted target
|
||||
assertThat(distributionSetManagement
|
||||
.unassignTag(Collections.singletonList(permitted.getId()), dsTag.getId()))
|
||||
.unassignTag(Collections.singletonList(permitted.getId()), dsTagId))
|
||||
.size()
|
||||
.isEqualTo(1);
|
||||
// verify distributionSetManagement#assignTag on permitted target
|
||||
assertThat(distributionSetManagement.assignTag(Collections.singletonList(permitted.getId()), dsTag.getId()))
|
||||
assertThat(distributionSetManagement.assignTag(Collections.singletonList(permitted.getId()), dsTagId))
|
||||
.hasSize(1);
|
||||
// verify distributionSetManagement#unAssignTag on permitted target
|
||||
assertThat(distributionSetManagement.unassignTag(List.of(permitted.getId()), dsTag.getId())
|
||||
assertThat(distributionSetManagement.unassignTag(List.of(permitted.getId()), dsTagId)
|
||||
.get(0).getId())
|
||||
.isEqualTo(permitted.getId());
|
||||
|
||||
// assignment is denied for readOnlyTarget (read, but no update permissions)
|
||||
final List<Long> readOblyList = Collections.singletonList(readOnly.getId());
|
||||
assertThatThrownBy(() ->
|
||||
distributionSetManagement.unassignTag(Collections.singletonList(readOnly.getId()), dsTag.getId()))
|
||||
distributionSetManagement.unassignTag(readOblyList, dsTagId))
|
||||
.as("Missing update permissions for target to toggle tag assignment.")
|
||||
.isInstanceOf(InsufficientPermissionException.class);
|
||||
|
||||
// assignment is denied for readOnlyTarget (read, but no update permissions)
|
||||
// dsTag2- since - it is tagged with dsTag and won't do anything if assigning dsTag
|
||||
assertThatThrownBy(() -> {
|
||||
distributionSetManagement.assignTag(Collections.singletonList(readOnly.getId()), dsTag2.getId());
|
||||
distributionSetManagement.assignTag(readOblyList, dsTag2Id);
|
||||
}).as("Missing update permissions for target to toggle tag assignment.")
|
||||
.isInstanceOf(InsufficientPermissionException.class);
|
||||
|
||||
// assignment is denied for hiddenTarget since it's hidden
|
||||
assertThatThrownBy(() -> distributionSetManagement.unassignTag(Collections.singletonList(hidden.getId()), dsTag.getId()))
|
||||
final List<Long> hiddenList = Collections.singletonList(hidden.getId());
|
||||
assertThatThrownBy(() -> distributionSetManagement.unassignTag(hiddenList, dsTagId))
|
||||
.as("Missing update permissions for target to toggle tag assignment.")
|
||||
.isInstanceOf(EntityNotFoundException.class);
|
||||
|
||||
// assignment is denied for hiddenTarget since it's hidden
|
||||
assertThatThrownBy(() -> {
|
||||
distributionSetManagement.assignTag(Collections.singletonList(hidden.getId()), dsTag.getId());
|
||||
distributionSetManagement.assignTag(hiddenList, dsTagId);
|
||||
}).as("Missing update permissions for target to toggle tag assignment.")
|
||||
.isInstanceOf(EntityNotFoundException.class);
|
||||
|
||||
// assignment is denied for hiddenTarget since it's hidden
|
||||
assertThatThrownBy(() -> {
|
||||
distributionSetManagement.unassignTag(List.of(hidden.getId()), dsTag.getId());
|
||||
}).as("Missing update permissions for target to toggle tag assignment.")
|
||||
final List<Long> hiddenIdList = List.of(hidden.getId());
|
||||
assertThatThrownBy(() -> distributionSetManagement.unassignTag(hiddenIdList, dsTagId))
|
||||
.as("Missing update permissions for target to toggle tag assignment.")
|
||||
.isInstanceOf(EntityNotFoundException.class);
|
||||
}
|
||||
|
||||
@@ -287,12 +294,10 @@ class DistributionSetAccessControllerTest extends AbstractAccessControllerTest {
|
||||
.updateAutoAssignDS(new AutoAssignDistributionSetUpdate(targetFilterQuery.getId())
|
||||
.ds(readOnly.getId()).actionType(Action.ActionType.FORCED).confirmationRequired(false))
|
||||
.getAutoAssignDistributionSet().getId();
|
||||
assertThatThrownBy(() -> {
|
||||
targetFilterQueryManagement
|
||||
.updateAutoAssignDS(new AutoAssignDistributionSetUpdate(targetFilterQuery.getId())
|
||||
.ds(hidden.getId()).actionType(Action.ActionType.FORCED).confirmationRequired(false))
|
||||
.getAutoAssignDistributionSet().getId();
|
||||
}).isInstanceOf(EntityNotFoundException.class);
|
||||
final AutoAssignDistributionSetUpdate autoAssignDistributionSetUpdate = new AutoAssignDistributionSetUpdate(targetFilterQuery.getId())
|
||||
.ds(hidden.getId()).actionType(Action.ActionType.FORCED).confirmationRequired(false);
|
||||
assertThatThrownBy(() -> targetFilterQueryManagement.updateAutoAssignDS(autoAssignDistributionSetUpdate))
|
||||
.isInstanceOf(EntityNotFoundException.class);
|
||||
}
|
||||
|
||||
private void defineAccess(final AccessController.Operation operation, final DistributionSet... distributionSets) {
|
||||
|
||||
@@ -24,6 +24,7 @@ import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import jakarta.validation.ConstraintViolationException;
|
||||
@@ -196,18 +197,19 @@ class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
||||
@Test
|
||||
@Description("Test verifies that the 'max actions per target' quota is enforced.")
|
||||
void assertMaxActionsPerTargetQuotaIsEnforced() {
|
||||
enableMultiAssignments();
|
||||
|
||||
final int maxActions = quotaManagement.getMaxActionsPerTarget();
|
||||
final Target testTarget = testdataFactory.createTarget();
|
||||
final DistributionSet ds1 = testdataFactory.createDistributionSet("ds1");
|
||||
final Long ds1Id = testdataFactory.createDistributionSet("ds1").getId();
|
||||
|
||||
enableMultiAssignments();
|
||||
final String controllerId = testTarget.getControllerId();
|
||||
for (int i = 0; i < maxActions; i++) {
|
||||
deploymentManagement.offlineAssignedDistributionSets(Collections
|
||||
.singletonList(new SimpleEntry<>(testTarget.getControllerId(), ds1.getId())));
|
||||
deploymentManagement.offlineAssignedDistributionSets(List.of(new SimpleEntry<>(controllerId, ds1Id)));
|
||||
}
|
||||
|
||||
assertThatExceptionOfType(AssignmentQuotaExceededException.class)
|
||||
.isThrownBy(() -> assignDistributionSet(ds1.getId(), testTarget.getControllerId(), 77));
|
||||
.isThrownBy(() -> assignDistributionSet(ds1Id, controllerId, 77));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -277,10 +279,10 @@ class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
||||
// not exists
|
||||
assignDS.add(100L);
|
||||
|
||||
final DistributionSetTag tag = distributionSetTagManagement.create(entityFactory.tag().create().name("Tag1"));
|
||||
final Long tagId = distributionSetTagManagement.create(entityFactory.tag().create().name("Tag1")).getId();
|
||||
|
||||
assertThatExceptionOfType(EntityNotFoundException.class)
|
||||
.isThrownBy(() -> distributionSetManagement.assignTag(assignDS, tag.getId()))
|
||||
.isThrownBy(() -> distributionSetManagement.assignTag(assignDS, tagId))
|
||||
.withMessageContaining("DistributionSet")
|
||||
.withMessageContaining(String.valueOf(100L));
|
||||
}
|
||||
@@ -455,7 +457,7 @@ class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
||||
|
||||
final Target target = action.getTarget();
|
||||
final DistributionSet ds = testdataFactory.createDistributionSet("newDS", true);
|
||||
final Action assigningAction = assignSet(target, ds);
|
||||
final Long assigningActionId = assignSet(target, ds).getId();
|
||||
|
||||
// verify assignment
|
||||
assertThat(actionRepository.findAll()).as("wrong size of action").hasSize(2);
|
||||
@@ -464,7 +466,7 @@ class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
||||
// force quit assignment
|
||||
assertThatExceptionOfType(ForceQuitActionNotAllowedException.class)
|
||||
.as("expected ForceQuitActionNotAllowedException")
|
||||
.isThrownBy(() -> deploymentManagement.forceQuitAction(assigningAction.getId()));
|
||||
.isThrownBy(() -> deploymentManagement.forceQuitAction(assigningActionId));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -706,8 +708,9 @@ class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
||||
final DeploymentRequest targetToDS1 = DeploymentManagement
|
||||
.deploymentRequest(target.getControllerId(), distributionSets.get(1).getId()).setWeight(565).build();
|
||||
|
||||
final List<DeploymentRequest> deploymentRequests = List.of(targetToDS0, targetToDS1);
|
||||
Assertions.assertThatExceptionOfType(MultiAssignmentIsNotEnabledException.class)
|
||||
.isThrownBy(() -> deploymentManagement.assignDistributionSets(Arrays.asList(targetToDS0, targetToDS1)));
|
||||
.isThrownBy(() -> deploymentManagement.assignDistributionSets(deploymentRequests));
|
||||
|
||||
enableMultiAssignments();
|
||||
assertThat(getResultingActionCount(
|
||||
@@ -981,16 +984,18 @@ class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
||||
final DeploymentRequest weightTooHigh = DeploymentManagement.deploymentRequest(targetId, dsId)
|
||||
.setWeight(Action.WEIGHT_MAX + 1).build();
|
||||
enableMultiAssignments();
|
||||
final List<DeploymentRequest> deploymentRequestsTooLow = Collections.singletonList(weightTooLow);
|
||||
Assertions.assertThatExceptionOfType(ConstraintViolationException.class)
|
||||
.isThrownBy(() -> deploymentManagement.assignDistributionSets(Collections.singletonList(weightTooLow)));
|
||||
.isThrownBy(() -> deploymentManagement.assignDistributionSets(deploymentRequestsTooLow));
|
||||
final List<DeploymentRequest> deploymentRequestsTooHigh = Collections.singletonList(weightTooHigh);
|
||||
Assertions.assertThatExceptionOfType(ConstraintViolationException.class).isThrownBy(
|
||||
() -> deploymentManagement.assignDistributionSets(Collections.singletonList(weightTooHigh)));
|
||||
final Long valideActionId1 = getFirstAssignedAction(
|
||||
() -> deploymentManagement.assignDistributionSets(deploymentRequestsTooHigh));
|
||||
final Long validActionId1 = getFirstAssignedAction(
|
||||
deploymentManagement.assignDistributionSets(Collections.singletonList(valideRequest1)).get(0)).getId();
|
||||
final Long valideActionId2 = getFirstAssignedAction(
|
||||
final Long validActionId2 = getFirstAssignedAction(
|
||||
deploymentManagement.assignDistributionSets(Collections.singletonList(valideRequest2)).get(0)).getId();
|
||||
assertThat(actionRepository.findById(valideActionId1).get().getWeight()).get().isEqualTo(Action.WEIGHT_MAX);
|
||||
assertThat(actionRepository.findById(valideActionId2).get().getWeight()).get().isEqualTo(Action.WEIGHT_MIN);
|
||||
assertThat(actionRepository.findById(validActionId1).get().getWeight()).get().isEqualTo(Action.WEIGHT_MAX);
|
||||
assertThat(actionRepository.findById(validActionId2).get().getWeight()).get().isEqualTo(Action.WEIGHT_MIN);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1283,10 +1288,9 @@ class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
||||
.asList(DistributionSetSpecification.isDeleted(true), DistributionSetSpecification.isCompleted(true))),
|
||||
PAGE).getContent()).as("wrong size of founded ds").hasSize(noOfDistributionSets);
|
||||
|
||||
for (final DistributionSet ignored : deploymentResult.getDistributionSets()) {
|
||||
testdataFactory.sendUpdateActionStatusToTargets(deploymentResult.getDeployedTargets(), Status.FINISHED,
|
||||
Collections.singletonList("blabla alles gut"));
|
||||
}
|
||||
IntStream.range(0, deploymentResult.getDistributionSets().size()).forEach(i -> testdataFactory.sendUpdateActionStatusToTargets(
|
||||
deploymentResult.getDeployedTargets(), Status.FINISHED, Collections.singletonList("blabla alles gut")));
|
||||
|
||||
// try to delete again
|
||||
distributionSetManagement.delete(deploymentResult.getDistributionSetIDs());
|
||||
// verify that the result is the same, even though distributionSet dsA
|
||||
@@ -1304,22 +1308,18 @@ class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
||||
@Test
|
||||
@Description("Deletes multiple targets and verifies that all related metadata is also deleted.")
|
||||
void deletesTargetsAndVerifyCascadeDeletes() {
|
||||
|
||||
final String undeployedTargetPrefix = "undep-T";
|
||||
final int noOfUndeployedTargets = 2;
|
||||
|
||||
final String deployedTargetPrefix = "dep-T";
|
||||
final int noOfDeployedTargets = 4;
|
||||
|
||||
final int noOfDistributionSets = 3;
|
||||
|
||||
final DeploymentResult deploymentResult = prepareComplexRepo(undeployedTargetPrefix, noOfUndeployedTargets,
|
||||
deployedTargetPrefix, noOfDeployedTargets, noOfDistributionSets, "myTestDS");
|
||||
|
||||
for (final DistributionSet ignored : deploymentResult.getDistributionSets()) {
|
||||
testdataFactory.sendUpdateActionStatusToTargets(deploymentResult.getDeployedTargets(), Status.FINISHED,
|
||||
Collections.singletonList("blabla alles gut"));
|
||||
}
|
||||
IntStream.range(0, deploymentResult.getDistributionSets().size()).forEach(i -> testdataFactory.sendUpdateActionStatusToTargets(
|
||||
deploymentResult.getDeployedTargets(), Status.FINISHED, Collections.singletonList("blabla alles gut")));
|
||||
|
||||
assertThat(targetManagement.count()).as("size of targets is wrong").isNotZero();
|
||||
assertThat(actionStatusRepository.count()).as("size of action status is wrong").isNotZero();
|
||||
|
||||
@@ -69,6 +69,7 @@ public class DeviceApp {
|
||||
private final DdiController device;
|
||||
private final MgmtApi mgmtApi;
|
||||
|
||||
@SuppressWarnings("java:S3358")
|
||||
Shell(final DdiTenant ddiTenant, final MgmtApi mgmtApi, final Optional<UpdateHandler> updateHandler) {
|
||||
this.ddiTenant = ddiTenant;
|
||||
this.mgmtApi = mgmtApi;
|
||||
|
||||
Reference in New Issue
Block a user