introduced open actionIds in MgmtTargetAssignmentResponseBody (#864)
* introduced open actionIds in MgmtTargetAssignmentResponseBody Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com> * fixed SonarQube issues Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com> * removed unused method parameter Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com> * updated documentation tests Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com> * added limit to the alreadyAssignedActions in the AssignmentResult Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com> * moved alreadyAssignedActions limitation to MgmtDistributionSetMapper Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com> * fixed review findings Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com> * removed alreadyAssignedActions Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com> * fixed sonarQube issues Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com> * fixed compilation error Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com> * fixed PR review findings Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com> * fixed PR review findings Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com> * Renamed AssignmentResult to AbstractAssignmentResult Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com> * fixed review findings Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com> * fixed formatting Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com> * reverted method visibility Signed-off-by: Ahmed Sayed <ahmed.sayed@bosch-si.com>
This commit is contained in:
committed by
Dominic Schabel
parent
973f1952c7
commit
d40b11d2ab
@@ -85,11 +85,10 @@ public class PropertyBasedArtifactUrlHandler implements ArtifactUrlHandler {
|
|||||||
@Override
|
@Override
|
||||||
public List<ArtifactUrl> getUrls(final URLPlaceholder placeholder, final ApiType api, final URI requestUri) {
|
public List<ArtifactUrl> getUrls(final URLPlaceholder placeholder, final ApiType api, final URI requestUri) {
|
||||||
|
|
||||||
return urlHandlerProperties.getProtocols().entrySet().stream()
|
return urlHandlerProperties.getProtocols().values().stream()
|
||||||
.filter(entry -> entry.getValue().getSupports().contains(api))
|
.filter(urlProtocol -> urlProtocol.getSupports().contains(api) && urlProtocol.isEnabled())
|
||||||
.filter(entry -> entry.getValue().isEnabled())
|
.map(urlProtocol -> new ArtifactUrl(urlProtocol.getProtocol().toUpperCase(), urlProtocol.getRel(),
|
||||||
.map(entry -> new ArtifactUrl(entry.getValue().getProtocol().toUpperCase(), entry.getValue().getRel(),
|
generateUrl(urlProtocol, placeholder, requestUri)))
|
||||||
generateUrl(entry.getValue(), placeholder, requestUri)))
|
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Action createAction(final DistributionSet testDs) {
|
private Action createAction(final DistributionSet testDs) {
|
||||||
return deploymentManagement.findAction(assignDistributionSet(testDs, testTarget).getActionIds().get(0)).get();
|
return getFirstAssignedAction(assignDistributionSet(testDs, testTarget));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -235,7 +235,7 @@ public abstract class AbstractAmqpServiceIntegrationTest extends AbstractAmqpInt
|
|||||||
|
|
||||||
protected Long registerTargetAndCancelActionId(final String controllerId) {
|
protected Long registerTargetAndCancelActionId(final String controllerId) {
|
||||||
final DistributionSetAssignmentResult assignmentResult = registerTargetAndAssignDistributionSet(controllerId);
|
final DistributionSetAssignmentResult assignmentResult = registerTargetAndAssignDistributionSet(controllerId);
|
||||||
return cancelAction(assignmentResult.getActionIds().get(0), controllerId);
|
return cancelAction(getFirstAssignedActionId(assignmentResult), controllerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void assertAllTargetsCount(final long expectedTargetsCount) {
|
protected void assertAllTargetsCount(final long expectedTargetsCount) {
|
||||||
|
|||||||
@@ -150,12 +150,11 @@ public class AmqpMessageDispatcherServiceIntegrationTest extends AbstractAmqpSer
|
|||||||
testdataFactory.addSoftwareModuleMetadata(distributionSet2);
|
testdataFactory.addSoftwareModuleMetadata(distributionSet2);
|
||||||
assignDistributionSet(distributionSet2.getId(), controllerId);
|
assignDistributionSet(distributionSet2.getId(), controllerId);
|
||||||
assertDownloadAndInstallMessage(distributionSet2.getModules(), controllerId);
|
assertDownloadAndInstallMessage(distributionSet2.getModules(), controllerId);
|
||||||
assertCancelActionMessage(assignmentResult.getActionIds().get(0), controllerId);
|
assertCancelActionMessage(getFirstAssignedActionId(assignmentResult), controllerId);
|
||||||
|
|
||||||
createAndSendThingCreated(controllerId, TENANT_EXIST);
|
createAndSendThingCreated(controllerId, TENANT_EXIST);
|
||||||
waitUntilTargetHasStatus(controllerId, TargetUpdateStatus.PENDING);
|
waitUntilTargetHasStatus(controllerId, TargetUpdateStatus.PENDING);
|
||||||
assertCancelActionMessage(assignmentResult.getActionIds().get(0), controllerId);
|
assertCancelActionMessage(getFirstAssignedActionId(assignmentResult), controllerId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -258,9 +257,9 @@ public class AmqpMessageDispatcherServiceIntegrationTest extends AbstractAmqpSer
|
|||||||
registerAndAssertTargetWithExistingTenant(controllerId);
|
registerAndAssertTargetWithExistingTenant(controllerId);
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet(UUID.randomUUID().toString());
|
final DistributionSet ds = testdataFactory.createDistributionSet(UUID.randomUUID().toString());
|
||||||
|
|
||||||
final Long actionId1 = assignDistributionSet(ds.getId(), controllerId).getActionIds().get(0);
|
final Long actionId1 = getFirstAssignedActionId(assignDistributionSet(ds.getId(), controllerId));
|
||||||
waitUntilEventMessagesAreDispatchedToTarget(EventTopic.MULTI_ACTION);
|
waitUntilEventMessagesAreDispatchedToTarget(EventTopic.MULTI_ACTION);
|
||||||
final Long actionId2 = assignDistributionSet(ds.getId(), controllerId).getActionIds().get(0);
|
final Long actionId2 = getFirstAssignedActionId(assignDistributionSet(ds.getId(), controllerId));
|
||||||
waitUntilEventMessagesAreDispatchedToTarget(EventTopic.MULTI_ACTION);
|
waitUntilEventMessagesAreDispatchedToTarget(EventTopic.MULTI_ACTION);
|
||||||
|
|
||||||
final Entry<Long, EventTopic> action1Install = new SimpleEntry<>(actionId1, EventTopic.DOWNLOAD_AND_INSTALL);
|
final Entry<Long, EventTopic> action1Install = new SimpleEntry<>(actionId1, EventTopic.DOWNLOAD_AND_INSTALL);
|
||||||
@@ -275,7 +274,7 @@ public class AmqpMessageDispatcherServiceIntegrationTest extends AbstractAmqpSer
|
|||||||
|
|
||||||
private Long assignNewDsToTarget(final String controllerId) {
|
private Long assignNewDsToTarget(final String controllerId) {
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet(UUID.randomUUID().toString());
|
final DistributionSet ds = testdataFactory.createDistributionSet(UUID.randomUUID().toString());
|
||||||
final Long actionId = assignDistributionSet(ds.getId(), controllerId).getActionIds().get(0);
|
final Long actionId = getFirstAssignedActionId(assignDistributionSet(ds.getId(), controllerId));
|
||||||
waitUntilTargetHasStatus(controllerId, TargetUpdateStatus.PENDING);
|
waitUntilTargetHasStatus(controllerId, TargetUpdateStatus.PENDING);
|
||||||
return actionId;
|
return actionId;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -589,13 +589,13 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AbstractAmqpServic
|
|||||||
final DistributionSet distributionSet = testdataFactory.createDistributionSet(UUID.randomUUID().toString());
|
final DistributionSet distributionSet = testdataFactory.createDistributionSet(UUID.randomUUID().toString());
|
||||||
final DistributionSetAssignmentResult distributionSetAssignmentResult = assignDistributionSet(
|
final DistributionSetAssignmentResult distributionSetAssignmentResult = assignDistributionSet(
|
||||||
distributionSet.getId(), controllerId);
|
distributionSet.getId(), controllerId);
|
||||||
deploymentManagement.cancelAction(distributionSetAssignmentResult.getActionIds().get(0));
|
deploymentManagement.cancelAction(getFirstAssignedActionId(distributionSetAssignmentResult));
|
||||||
|
|
||||||
// test
|
// test
|
||||||
registerSameTargetAndAssertBasedOnVersion(controllerId, 1, TargetUpdateStatus.PENDING);
|
registerSameTargetAndAssertBasedOnVersion(controllerId, 1, TargetUpdateStatus.PENDING);
|
||||||
|
|
||||||
// verify
|
// verify
|
||||||
assertCancelActionMessage(distributionSetAssignmentResult.getActionIds().get(0), controllerId);
|
assertCancelActionMessage(getFirstAssignedActionId(distributionSetAssignmentResult), controllerId);
|
||||||
Mockito.verifyZeroInteractions(getDeadletterListener());
|
Mockito.verifyZeroInteractions(getDeadletterListener());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -947,7 +947,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AbstractAmqpServic
|
|||||||
|
|
||||||
private Long registerTargetAndSendActionStatus(final DmfActionStatus sendActionStatus, final String controllerId) {
|
private Long registerTargetAndSendActionStatus(final DmfActionStatus sendActionStatus, final String controllerId) {
|
||||||
final DistributionSetAssignmentResult assignmentResult = registerTargetAndAssignDistributionSet(controllerId);
|
final DistributionSetAssignmentResult assignmentResult = registerTargetAndAssignDistributionSet(controllerId);
|
||||||
final Long actionId = assignmentResult.getActionIds().get(0);
|
final Long actionId = getFirstAssignedActionId(assignmentResult);
|
||||||
sendActionUpdateStatus(new DmfActionUpdateStatus(actionId, sendActionStatus));
|
sendActionUpdateStatus(new DmfActionUpdateStatus(actionId, sendActionStatus));
|
||||||
return actionId;
|
return actionId;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,35 +18,24 @@ import java.util.List;
|
|||||||
* type of the assigned and unassigned {@link BaseEntity}s.
|
* type of the assigned and unassigned {@link BaseEntity}s.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class AssignmentResult<T extends BaseEntity> {
|
public abstract class AbstractAssignmentResult<T extends BaseEntity> {
|
||||||
|
|
||||||
private final int total;
|
|
||||||
private final int assigned;
|
|
||||||
private final int alreadyAssigned;
|
private final int alreadyAssigned;
|
||||||
private final int unassigned;
|
private final List<? extends T> assignedEntity;
|
||||||
private final List<T> assignedEntity;
|
private final List<? extends T> unassignedEntity;
|
||||||
private final List<T> unassignedEntity;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
|
||||||
* @param assigned
|
|
||||||
* is the number of newly assigned elements.
|
|
||||||
* @param alreadyAssigned
|
* @param alreadyAssigned
|
||||||
* number of already assigned/ignored elements
|
* count of already assigned entities
|
||||||
* @param unassigned
|
|
||||||
* number of newly assigned elements
|
|
||||||
* @param assignedEntity
|
* @param assignedEntity
|
||||||
* {@link List} of assigned entity.
|
* {@link List} of assigned entity.
|
||||||
* @param unassignedEntity
|
* @param unassignedEntity
|
||||||
* {@link List} of unassigned entity.
|
* {@link List} of unassigned entity.
|
||||||
*/
|
*/
|
||||||
public AssignmentResult(final int assigned, final int alreadyAssigned, final int unassigned,
|
public AbstractAssignmentResult(final int alreadyAssigned, final List<? extends T> assignedEntity,
|
||||||
final List<T> assignedEntity, final List<T> unassignedEntity) {
|
final List<? extends T> unassignedEntity) {
|
||||||
this.assigned = assigned;
|
|
||||||
this.alreadyAssigned = alreadyAssigned;
|
this.alreadyAssigned = alreadyAssigned;
|
||||||
total = assigned + alreadyAssigned;
|
|
||||||
this.unassigned = unassigned;
|
|
||||||
this.assignedEntity = assignedEntity;
|
this.assignedEntity = assignedEntity;
|
||||||
this.unassignedEntity = unassignedEntity;
|
this.unassignedEntity = unassignedEntity;
|
||||||
}
|
}
|
||||||
@@ -55,14 +44,14 @@ public class AssignmentResult<T extends BaseEntity> {
|
|||||||
* @return number of newly assigned elements.
|
* @return number of newly assigned elements.
|
||||||
*/
|
*/
|
||||||
public int getAssigned() {
|
public int getAssigned() {
|
||||||
return assigned;
|
return getAssignedEntity().size();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return total number (assigned and already assigned).
|
* @return total number (assigned and already assigned).
|
||||||
*/
|
*/
|
||||||
public int getTotal() {
|
public int getTotal() {
|
||||||
return total;
|
return getAssigned() + alreadyAssigned;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -76,7 +65,7 @@ public class AssignmentResult<T extends BaseEntity> {
|
|||||||
* @return number of unsassigned elements
|
* @return number of unsassigned elements
|
||||||
*/
|
*/
|
||||||
public int getUnassigned() {
|
public int getUnassigned() {
|
||||||
return unassigned;
|
return getUnassignedEntity().size();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -10,10 +10,6 @@ package org.eclipse.hawkbit.repository.model;
|
|||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import org.eclipse.hawkbit.repository.TargetManagement;
|
|
||||||
import org.springframework.util.CollectionUtils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A bean which holds a complex result of an service operation to combine the
|
* A bean which holds a complex result of an service operation to combine the
|
||||||
@@ -21,41 +17,24 @@ import org.springframework.util.CollectionUtils;
|
|||||||
* how much of the assignments had already been existed.
|
* how much of the assignments had already been existed.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class DistributionSetAssignmentResult extends AssignmentResult<Target> {
|
public class DistributionSetAssignmentResult extends AbstractAssignmentResult<Action> {
|
||||||
|
|
||||||
private final List<String> assignedTargets;
|
|
||||||
private final List<Action> actions;
|
|
||||||
|
|
||||||
private final DistributionSet distributionSet;
|
private final DistributionSet distributionSet;
|
||||||
|
|
||||||
private final TargetManagement targetManagement;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
* @param distributionSet
|
||||||
* @param distributionSet
|
|
||||||
* that has been assigned
|
* that has been assigned
|
||||||
* @param assignedTargets
|
|
||||||
* the target objects which have been assigned to the
|
|
||||||
* distribution set
|
|
||||||
* @param assigned
|
|
||||||
* count of the assigned targets
|
|
||||||
* @param alreadyAssigned
|
* @param alreadyAssigned
|
||||||
* the count of the already assigned targets
|
* the the count of already assigned targets
|
||||||
* @param actions
|
* @param assigned
|
||||||
* of the assignment
|
* the assigned actions
|
||||||
* @param targetManagement
|
|
||||||
* to retrieve the assigned targets
|
|
||||||
*/
|
*/
|
||||||
public DistributionSetAssignmentResult(final DistributionSet distributionSet, final List<String> assignedTargets,
|
public DistributionSetAssignmentResult(final DistributionSet distributionSet, final int alreadyAssigned,
|
||||||
final int assigned, final int alreadyAssigned, final List<Action> actions,
|
final List<? extends Action> assigned) {
|
||||||
final TargetManagement targetManagement) {
|
super(alreadyAssigned, assigned, Collections.emptyList());
|
||||||
super(assigned, alreadyAssigned, 0, Collections.emptyList(), Collections.emptyList());
|
|
||||||
this.distributionSet = distributionSet;
|
this.distributionSet = distributionSet;
|
||||||
this.assignedTargets = assignedTargets;
|
|
||||||
this.actions = actions;
|
|
||||||
this.targetManagement = targetManagement;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -65,32 +44,4 @@ public class DistributionSetAssignmentResult extends AssignmentResult<Target> {
|
|||||||
return distributionSet;
|
return distributionSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the actionIds
|
|
||||||
*/
|
|
||||||
public List<Long> getActionIds() {
|
|
||||||
if (actions == null) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
return actions.stream().map(Action::getId).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the actions
|
|
||||||
*/
|
|
||||||
public List<Action> getActions() {
|
|
||||||
if (actions == null) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
return actions;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Target> getAssignedEntity() {
|
|
||||||
if (CollectionUtils.isEmpty(assignedTargets)) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
return targetManagement.getByControllerID(assignedTargets);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import java.util.List;
|
|||||||
* Result object for {@link DistributionSetTag} assignments.
|
* Result object for {@link DistributionSetTag} assignments.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class DistributionSetTagAssignmentResult extends AssignmentResult<DistributionSet> {
|
public class DistributionSetTagAssignmentResult extends AbstractAssignmentResult<DistributionSet> {
|
||||||
|
|
||||||
private final DistributionSetTag distributionSetTag;
|
private final DistributionSetTag distributionSetTag;
|
||||||
|
|
||||||
@@ -24,20 +24,16 @@ public class DistributionSetTagAssignmentResult extends AssignmentResult<Distrib
|
|||||||
* @param alreadyAssigned
|
* @param alreadyAssigned
|
||||||
* number of already assigned/ignored elements
|
* number of already assigned/ignored elements
|
||||||
* @param assigned
|
* @param assigned
|
||||||
* number of newly assigned elements
|
* newly assigned elements
|
||||||
* @param unassigned
|
* @param unassigned
|
||||||
* number of newly assigned elements
|
* unassigned elements
|
||||||
* @param assignedDs
|
|
||||||
* {@link List} of assigned {@link DistributionSet}s.
|
|
||||||
* @param unassignedDs
|
|
||||||
* {@link List} of unassigned {@link DistributionSet}s.
|
|
||||||
* @param distributionSetTag
|
* @param distributionSetTag
|
||||||
* the assigned or unassigned tag
|
* the assigned or unassigned tag
|
||||||
*/
|
*/
|
||||||
public DistributionSetTagAssignmentResult(final int alreadyAssigned, final int assigned, final int unassigned,
|
public DistributionSetTagAssignmentResult(final int alreadyAssigned,
|
||||||
final List<DistributionSet> assignedDs, final List<DistributionSet> unassignedDs,
|
final List<DistributionSet> assigned, final List<DistributionSet> unassigned,
|
||||||
final DistributionSetTag distributionSetTag) {
|
final DistributionSetTag distributionSetTag) {
|
||||||
super(assigned, alreadyAssigned, unassigned, assignedDs, unassignedDs);
|
super(alreadyAssigned, assigned, unassigned);
|
||||||
this.distributionSetTag = distributionSetTag;
|
this.distributionSetTag = distributionSetTag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import java.util.List;
|
|||||||
* Result object for {@link TargetTag} assignments.
|
* Result object for {@link TargetTag} assignments.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class TargetTagAssignmentResult extends AssignmentResult<Target> {
|
public class TargetTagAssignmentResult extends AbstractAssignmentResult<Target> {
|
||||||
|
|
||||||
private final TargetTag targetTag;
|
private final TargetTag targetTag;
|
||||||
|
|
||||||
@@ -22,21 +22,17 @@ public class TargetTagAssignmentResult extends AssignmentResult<Target> {
|
|||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
* @param alreadyAssigned
|
* @param alreadyAssigned
|
||||||
* number of already assigned/ignored elements
|
* count of already assigned (ignored) elements
|
||||||
* @param assigned
|
* @param assigned
|
||||||
* number of newly assigned elements
|
|
||||||
* @param unassigned
|
|
||||||
* number of newly assigned elements
|
|
||||||
* @param assignedTargets
|
|
||||||
* {@link List} of assigned {@link Target}s.
|
* {@link List} of assigned {@link Target}s.
|
||||||
* @param unassignedTargets
|
* @param unassigned
|
||||||
* {@link List} of unassigned {@link Target}s.
|
* {@link List} of unassigned {@link Target}s.
|
||||||
* @param targetTag
|
* @param targetTag
|
||||||
* the assigned or unassigned tag
|
* the assigned or unassigned tag
|
||||||
*/
|
*/
|
||||||
public TargetTagAssignmentResult(final int alreadyAssigned, final int assigned, final int unassigned,
|
public TargetTagAssignmentResult(final int alreadyAssigned, final List<? extends Target> assigned,
|
||||||
final List<Target> assignedTargets, final List<Target> unassignedTargets, final TargetTag targetTag) {
|
final List<? extends Target> unassigned, final TargetTag targetTag) {
|
||||||
super(assigned, alreadyAssigned, unassigned, assignedTargets, unassignedTargets);
|
super(alreadyAssigned, assigned, unassigned);
|
||||||
this.targetTag = targetTag;
|
this.targetTag = targetTag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ public abstract class AbstractDsAssignmentStrategy {
|
|||||||
abstract List<JpaTarget> findTargetsForAssignment(final List<String> controllerIDs, final long distributionSetId);
|
abstract List<JpaTarget> findTargetsForAssignment(final List<String> controllerIDs, final long distributionSetId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param set
|
* @param set
|
||||||
* @param targets
|
* @param targets
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -242,7 +242,7 @@ public interface ActionRepository extends BaseEntityRepository<JpaAction, Long>,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves all {@link Action}s that matches the queried externalRefs.
|
* Retrieves all {@link Action}s that matches the queried externalRefs.
|
||||||
*
|
*
|
||||||
* @param externalRefs
|
* @param externalRefs
|
||||||
* for which the actions need to be found
|
* for which the actions need to be found
|
||||||
* @param active
|
* @param active
|
||||||
@@ -518,7 +518,7 @@ public interface ActionRepository extends BaseEntityRepository<JpaAction, Long>,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the externalRef of an action by its actionId.
|
* Updates the externalRef of an action by its actionId.
|
||||||
*
|
*
|
||||||
* @param actionId
|
* @param actionId
|
||||||
* for which the externalRef is being updated.
|
* for which the externalRef is being updated.
|
||||||
* @param externalRef
|
* @param externalRef
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ import org.eclipse.hawkbit.repository.ActionFields;
|
|||||||
import org.eclipse.hawkbit.repository.DeploymentManagement;
|
import org.eclipse.hawkbit.repository.DeploymentManagement;
|
||||||
import org.eclipse.hawkbit.repository.QuotaManagement;
|
import org.eclipse.hawkbit.repository.QuotaManagement;
|
||||||
import org.eclipse.hawkbit.repository.RepositoryConstants;
|
import org.eclipse.hawkbit.repository.RepositoryConstants;
|
||||||
import org.eclipse.hawkbit.repository.TargetManagement;
|
|
||||||
import org.eclipse.hawkbit.repository.TenantConfigurationManagement;
|
import org.eclipse.hawkbit.repository.TenantConfigurationManagement;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.TargetAssignDistributionSetEvent;
|
import org.eclipse.hawkbit.repository.event.remote.TargetAssignDistributionSetEvent;
|
||||||
import org.eclipse.hawkbit.repository.exception.CancelActionNotAllowedException;
|
import org.eclipse.hawkbit.repository.exception.CancelActionNotAllowedException;
|
||||||
@@ -122,7 +121,6 @@ public class JpaDeploymentManagement implements DeploymentManagement {
|
|||||||
private final DistributionSetRepository distributionSetRepository;
|
private final DistributionSetRepository distributionSetRepository;
|
||||||
private final TargetRepository targetRepository;
|
private final TargetRepository targetRepository;
|
||||||
private final ActionStatusRepository actionStatusRepository;
|
private final ActionStatusRepository actionStatusRepository;
|
||||||
private final TargetManagement targetManagement;
|
|
||||||
private final AuditorAware<String> auditorProvider;
|
private final AuditorAware<String> auditorProvider;
|
||||||
private final VirtualPropertyReplacer virtualPropertyReplacer;
|
private final VirtualPropertyReplacer virtualPropertyReplacer;
|
||||||
private final PlatformTransactionManager txManager;
|
private final PlatformTransactionManager txManager;
|
||||||
@@ -136,10 +134,9 @@ public class JpaDeploymentManagement implements DeploymentManagement {
|
|||||||
|
|
||||||
protected JpaDeploymentManagement(final EntityManager entityManager, final ActionRepository actionRepository,
|
protected JpaDeploymentManagement(final EntityManager entityManager, final ActionRepository actionRepository,
|
||||||
final DistributionSetRepository distributionSetRepository, final TargetRepository targetRepository,
|
final DistributionSetRepository distributionSetRepository, final TargetRepository targetRepository,
|
||||||
final ActionStatusRepository actionStatusRepository, final TargetManagement targetManagement,
|
final ActionStatusRepository actionStatusRepository, final AuditorAware<String> auditorProvider,
|
||||||
final AuditorAware<String> auditorProvider, final EventPublisherHolder eventPublisherHolder,
|
final EventPublisherHolder eventPublisherHolder, final AfterTransactionCommitExecutor afterCommit,
|
||||||
final AfterTransactionCommitExecutor afterCommit, final VirtualPropertyReplacer virtualPropertyReplacer,
|
final VirtualPropertyReplacer virtualPropertyReplacer, final PlatformTransactionManager txManager,
|
||||||
final PlatformTransactionManager txManager,
|
|
||||||
final TenantConfigurationManagement tenantConfigurationManagement, final QuotaManagement quotaManagement,
|
final TenantConfigurationManagement tenantConfigurationManagement, final QuotaManagement quotaManagement,
|
||||||
final SystemSecurityContext systemSecurityContext, final TenantAware tenantAware, final Database database) {
|
final SystemSecurityContext systemSecurityContext, final TenantAware tenantAware, final Database database) {
|
||||||
this.entityManager = entityManager;
|
this.entityManager = entityManager;
|
||||||
@@ -147,7 +144,6 @@ public class JpaDeploymentManagement implements DeploymentManagement {
|
|||||||
this.distributionSetRepository = distributionSetRepository;
|
this.distributionSetRepository = distributionSetRepository;
|
||||||
this.targetRepository = targetRepository;
|
this.targetRepository = targetRepository;
|
||||||
this.actionStatusRepository = actionStatusRepository;
|
this.actionStatusRepository = actionStatusRepository;
|
||||||
this.targetManagement = targetManagement;
|
|
||||||
this.auditorProvider = auditorProvider;
|
this.auditorProvider = auditorProvider;
|
||||||
this.virtualPropertyReplacer = virtualPropertyReplacer;
|
this.virtualPropertyReplacer = virtualPropertyReplacer;
|
||||||
this.txManager = txManager;
|
this.txManager = txManager;
|
||||||
@@ -263,50 +259,70 @@ public class JpaDeploymentManagement implements DeploymentManagement {
|
|||||||
final AbstractDsAssignmentStrategy assignmentStrategy) {
|
final AbstractDsAssignmentStrategy assignmentStrategy) {
|
||||||
|
|
||||||
final JpaDistributionSet distributionSetEntity = getAndValidateDsById(dsID);
|
final JpaDistributionSet distributionSetEntity = getAndValidateDsById(dsID);
|
||||||
final List<String> controllerIDs = getControllerIdsForAssignmentAndCheckQuota(targetsWithActionType,
|
checkQuotaForAssignment(targetsWithActionType, distributionSetEntity);
|
||||||
distributionSetEntity);
|
|
||||||
final List<JpaTarget> targetEntities = assignmentStrategy.findTargetsForAssignment(controllerIDs,
|
final List<JpaTarget> targetEntities = assignmentStrategy.findTargetsForAssignment(
|
||||||
|
targetsWithActionType.stream().map(TargetWithActionType::getControllerId).collect(Collectors.toList()),
|
||||||
distributionSetEntity.getId());
|
distributionSetEntity.getId());
|
||||||
|
|
||||||
if (targetEntities.isEmpty()) {
|
if (targetEntities.isEmpty()) {
|
||||||
// detaching as it is not necessary to persist the set itself
|
return allTargetsAlreadyAssignedResult(distributionSetEntity, targetsWithActionType.size());
|
||||||
entityManager.detach(distributionSetEntity);
|
|
||||||
// return with nothing as all targets had the DS already assigned
|
|
||||||
return new DistributionSetAssignmentResult(distributionSetEntity, Collections.emptyList(), 0,
|
|
||||||
targetsWithActionType.size(), Collections.emptyList(), targetManagement);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// split tIDs length into max entries in-statement because many database
|
final List<JpaAction> assignedActions = doAssignDistributionSetToTargets(targetsWithActionType,
|
||||||
// have constraint of max entries in in-statements e.g. Oracle with
|
actionMessage, assignmentStrategy, distributionSetEntity, targetEntities);
|
||||||
// maximum 1000 elements, so we need to split the entries here and
|
return buildAssignmentResult(distributionSetEntity, assignedActions, targetsWithActionType.size());
|
||||||
// execute multiple statements
|
}
|
||||||
final List<List<Long>> targetEntitiesIdsChunks = Lists.partition(
|
|
||||||
targetEntities.stream().map(Target::getId).collect(Collectors.toList()),
|
|
||||||
Constants.MAX_ENTRIES_IN_STATEMENT);
|
|
||||||
|
|
||||||
|
private DistributionSetAssignmentResult allTargetsAlreadyAssignedResult(
|
||||||
|
final JpaDistributionSet distributionSetEntity, final int alreadyAssignedCount) {
|
||||||
|
// detaching as it is not necessary to persist the set itself
|
||||||
|
entityManager.detach(distributionSetEntity);
|
||||||
|
// return with nothing as all targets had the DS already assigned
|
||||||
|
return new DistributionSetAssignmentResult(distributionSetEntity, alreadyAssignedCount,
|
||||||
|
Collections.emptyList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<JpaAction> doAssignDistributionSetToTargets(
|
||||||
|
final Collection<TargetWithActionType> targetsWithActionType, final String actionMessage,
|
||||||
|
final AbstractDsAssignmentStrategy assignmentStrategy, final JpaDistributionSet distributionSetEntity,
|
||||||
|
final List<JpaTarget> targetEntities) {
|
||||||
|
final List<List<Long>> targetEntitiesIdsChunks = getTargetEntitiesAsChunks(targetEntities);
|
||||||
closeOrCancelActiveActions(assignmentStrategy, targetEntitiesIdsChunks);
|
closeOrCancelActiveActions(assignmentStrategy, targetEntitiesIdsChunks);
|
||||||
// cancel all scheduled actions which are in-active, these actions were
|
// cancel all scheduled actions which are in-active, these actions were
|
||||||
// not active before and the manual assignment which has been done
|
// not active before and the manual assignment which has been done
|
||||||
// cancels them
|
// cancels them
|
||||||
targetEntitiesIdsChunks.forEach(this::cancelInactiveScheduledActionsForTargets);
|
targetEntitiesIdsChunks.forEach(this::cancelInactiveScheduledActionsForTargets);
|
||||||
|
|
||||||
setAssignedDistributionSetAndTargetUpdateStatus(assignmentStrategy, distributionSetEntity,
|
setAssignedDistributionSetAndTargetUpdateStatus(assignmentStrategy, distributionSetEntity,
|
||||||
targetEntitiesIdsChunks);
|
targetEntitiesIdsChunks);
|
||||||
|
final List<JpaAction> assignedActions = createActions(targetsWithActionType, targetEntities, assignmentStrategy,
|
||||||
final Map<String, JpaAction> controllerIdsToActions = createActions(targetsWithActionType, targetEntities,
|
distributionSetEntity);
|
||||||
assignmentStrategy, distributionSetEntity);
|
|
||||||
// create initial action status when action is created so we remember
|
// create initial action status when action is created so we remember
|
||||||
// the initial running status because we will change the status
|
// the initial running status because we will change the status
|
||||||
// of the action itself and with this action status we have a nicer
|
// of the action itself and with this action status we have a nicer
|
||||||
// action history.
|
// action history.
|
||||||
createActionsStatus(controllerIdsToActions.values(), assignmentStrategy, actionMessage);
|
createActionsStatus(assignedActions, assignmentStrategy, actionMessage);
|
||||||
|
|
||||||
detachEntitiesAndSendTargetUpdatedEvents(distributionSetEntity, targetEntities, assignmentStrategy);
|
detachEntitiesAndSendTargetUpdatedEvents(distributionSetEntity, targetEntities, assignmentStrategy);
|
||||||
|
return assignedActions;
|
||||||
|
}
|
||||||
|
|
||||||
return new DistributionSetAssignmentResult(distributionSetEntity,
|
/**
|
||||||
targetEntities.stream().map(Target::getControllerId).collect(Collectors.toList()),
|
* split tIDs length into max entries in-statement because many database
|
||||||
targetEntities.size(), controllerIDs.size() - targetEntities.size(),
|
* have constraint of max entries in in-statements e.g. Oracle with maximum
|
||||||
Lists.newArrayList(controllerIdsToActions.values()), targetManagement);
|
* 1000 elements, so we need to split the entries here and execute multiple
|
||||||
|
* statements
|
||||||
|
*/
|
||||||
|
private static List<List<Long>> getTargetEntitiesAsChunks(final List<JpaTarget> targetEntities) {
|
||||||
|
return Lists.partition(targetEntities.stream().map(Target::getId).collect(Collectors.toList()),
|
||||||
|
Constants.MAX_ENTRIES_IN_STATEMENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static DistributionSetAssignmentResult buildAssignmentResult(final JpaDistributionSet distributionSet,
|
||||||
|
final List<JpaAction> assignedActions, final int totalTargetsForAssignment) {
|
||||||
|
int alreadyAssignedTargetsCount = totalTargetsForAssignment - assignedActions.size();
|
||||||
|
|
||||||
|
return new DistributionSetAssignmentResult(distributionSet, alreadyAssignedTargetsCount, assignedActions);
|
||||||
}
|
}
|
||||||
|
|
||||||
private JpaDistributionSet getAndValidateDsById(final Long dsID) {
|
private JpaDistributionSet getAndValidateDsById(final Long dsID) {
|
||||||
@@ -321,17 +337,12 @@ public class JpaDeploymentManagement implements DeploymentManagement {
|
|||||||
return distributionSet;
|
return distributionSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> getControllerIdsForAssignmentAndCheckQuota(
|
private void checkQuotaForAssignment(final Collection<TargetWithActionType> targetsWithActionType,
|
||||||
final Collection<TargetWithActionType> targetsWithActionType, final JpaDistributionSet distributionSet) {
|
final JpaDistributionSet distributionSet) {
|
||||||
final List<String> controllerIDs = targetsWithActionType.stream().map(TargetWithActionType::getControllerId)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
// enforce the 'max targets per manual assignment' quota
|
// enforce the 'max targets per manual assignment' quota
|
||||||
if (!controllerIDs.isEmpty()) {
|
if (!targetsWithActionType.isEmpty()) {
|
||||||
assertMaxTargetsPerManualAssignmentQuota(distributionSet.getId(), controllerIDs.size());
|
assertMaxTargetsPerManualAssignmentQuota(distributionSet.getId(), targetsWithActionType.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
return controllerIDs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -382,15 +393,14 @@ public class JpaDeploymentManagement implements DeploymentManagement {
|
|||||||
assignmentStrategy.setAssignedDistributionSetAndTargetStatus(set, targetIdsChunks, currentUser);
|
assignmentStrategy.setAssignedDistributionSetAndTargetStatus(set, targetIdsChunks, currentUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, JpaAction> createActions(final Collection<TargetWithActionType> targetsWithActionType,
|
private List<JpaAction> createActions(final Collection<TargetWithActionType> targetsWithActionType,
|
||||||
final List<JpaTarget> targets, final AbstractDsAssignmentStrategy assignmentStrategy,
|
final List<JpaTarget> targets, final AbstractDsAssignmentStrategy assignmentStrategy,
|
||||||
final JpaDistributionSet set) {
|
final JpaDistributionSet set) {
|
||||||
final Map<String, TargetWithActionType> targetsWithActionMap = targetsWithActionType.stream()
|
final Map<String, TargetWithActionType> targetsWithActionMap = targetsWithActionType.stream()
|
||||||
.collect(Collectors.toMap(TargetWithActionType::getControllerId, Function.identity()));
|
.collect(Collectors.toMap(TargetWithActionType::getControllerId, Function.identity()));
|
||||||
|
|
||||||
return targets.stream().map(trg -> assignmentStrategy.createTargetAction(targetsWithActionMap, trg, set))
|
return targets.stream().map(trg -> assignmentStrategy.createTargetAction(targetsWithActionMap, trg, set))
|
||||||
.filter(Objects::nonNull).map(actionRepository::save)
|
.filter(Objects::nonNull).map(actionRepository::save).collect(Collectors.toList());
|
||||||
.collect(Collectors.toMap(action -> action.getTarget().getControllerId(), Function.identity()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createActionsStatus(final Collection<JpaAction> actions,
|
private void createActionsStatus(final Collection<JpaAction> actions,
|
||||||
@@ -590,7 +600,7 @@ public class JpaDeploymentManagement implements DeploymentManagement {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<Action> findAction(final long actionId) {
|
public Optional<Action> findAction(final long actionId) {
|
||||||
return actionRepository.findById(actionId).map(a -> (Action) a);
|
return actionRepository.findById(actionId).map(a -> a);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -703,8 +713,8 @@ public class JpaDeploymentManagement implements DeploymentManagement {
|
|||||||
final CriteriaQuery<String> selMsgQuery = msgQuery.select(join);
|
final CriteriaQuery<String> selMsgQuery = msgQuery.select(join);
|
||||||
selMsgQuery.where(cb.equal(as.get(JpaActionStatus_.id), actionStatusId));
|
selMsgQuery.where(cb.equal(as.get(JpaActionStatus_.id), actionStatusId));
|
||||||
|
|
||||||
final List<String> result = entityManager.createQuery(selMsgQuery).setFirstResult((int) pageable.getOffset())
|
final List<String> result = new ArrayList<>(entityManager.createQuery(selMsgQuery)
|
||||||
.setMaxResults(pageable.getPageSize()).getResultList().stream().collect(Collectors.toList());
|
.setFirstResult((int) pageable.getOffset()).setMaxResults(pageable.getPageSize()).getResultList());
|
||||||
|
|
||||||
return new PageImpl<>(result, pageable, totalCount);
|
return new PageImpl<>(result, pageable, totalCount);
|
||||||
}
|
}
|
||||||
@@ -810,4 +820,4 @@ public class JpaDeploymentManagement implements DeploymentManagement {
|
|||||||
.runAsSystem(() -> tenantConfigurationManagement.getConfigurationValue(key, valueType).getValue());
|
.runAsSystem(() -> tenantConfigurationManagement.getConfigurationValue(key, valueType).getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -188,14 +188,13 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
|
|||||||
toBeChangedDSs.add(set);
|
toBeChangedDSs.add(set);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result = new DistributionSetTagAssignmentResult(dsIds.size() - toBeChangedDSs.size(), 0,
|
result = new DistributionSetTagAssignmentResult(dsIds.size() - toBeChangedDSs.size(),
|
||||||
toBeChangedDSs.size(), Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
Collections.unmodifiableList(
|
Collections.unmodifiableList(
|
||||||
toBeChangedDSs.stream().map(distributionSetRepository::save).collect(Collectors.toList())),
|
toBeChangedDSs.stream().map(distributionSetRepository::save).collect(Collectors.toList())),
|
||||||
myTag);
|
myTag);
|
||||||
} else {
|
} else {
|
||||||
result = new DistributionSetTagAssignmentResult(dsIds.size() - toBeChangedDSs.size(), toBeChangedDSs.size(),
|
result = new DistributionSetTagAssignmentResult(dsIds.size() - toBeChangedDSs.size(),
|
||||||
0,
|
|
||||||
Collections.unmodifiableList(
|
Collections.unmodifiableList(
|
||||||
toBeChangedDSs.stream().map(distributionSetRepository::save).collect(Collectors.toList())),
|
toBeChangedDSs.stream().map(distributionSetRepository::save).collect(Collectors.toList())),
|
||||||
Collections.emptyList(), myTag);
|
Collections.emptyList(), myTag);
|
||||||
@@ -386,7 +385,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
|
|||||||
specList = Arrays.asList(DistributionSetSpecification.isDeleted(false),
|
specList = Arrays.asList(DistributionSetSpecification.isDeleted(false),
|
||||||
DistributionSetSpecification.isCompleted(complete));
|
DistributionSetSpecification.isCompleted(complete));
|
||||||
} else {
|
} else {
|
||||||
specList = Arrays.asList(DistributionSetSpecification.isDeleted(false));
|
specList = Collections.singletonList(DistributionSetSpecification.isDeleted(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
return convertDsPage(findByCriteriaAPI(pageReq, specList), pageReq);
|
return convertDsPage(findByCriteriaAPI(pageReq, specList), pageReq);
|
||||||
@@ -754,7 +753,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
|
|||||||
public void delete(final long setId) {
|
public void delete(final long setId) {
|
||||||
throwExceptionIfDistributionSetDoesNotExist(setId);
|
throwExceptionIfDistributionSetDoesNotExist(setId);
|
||||||
|
|
||||||
delete(Arrays.asList(setId));
|
delete(Collections.singletonList(setId));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void throwExceptionIfDistributionSetDoesNotExist(final Long setId) {
|
private void throwExceptionIfDistributionSetDoesNotExist(final Long setId) {
|
||||||
@@ -811,7 +810,7 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<DistributionSet> get(final long id) {
|
public Optional<DistributionSet> get(final long id) {
|
||||||
return distributionSetRepository.findById(id).map(d -> (DistributionSet) d);
|
return distributionSetRepository.findById(id).map(d -> d);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -294,7 +294,7 @@ public class JpaTargetManagement implements TargetManagement {
|
|||||||
final Long targetId = getByControllerIdAndThrowIfNotFound(controllerId).getId();
|
final Long targetId = getByControllerIdAndThrowIfNotFound(controllerId).getId();
|
||||||
|
|
||||||
return targetMetadataRepository.findById(new TargetMetadataCompositeKey(targetId, key))
|
return targetMetadataRepository.findById(new TargetMetadataCompositeKey(targetId, key))
|
||||||
.map(t -> (TargetMetadata) t);
|
.map(t -> t);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -470,14 +470,14 @@ public class JpaTargetManagement implements TargetManagement {
|
|||||||
specList.add(TargetSpecifications
|
specList.add(TargetSpecifications
|
||||||
.likeIdOrNameOrDescriptionOrAttributeValue(filterParams.getFilterBySearchText()));
|
.likeIdOrNameOrDescriptionOrAttributeValue(filterParams.getFilterBySearchText()));
|
||||||
}
|
}
|
||||||
if (isHasTagsFilterActive(filterParams)) {
|
if (hasTagsFilterActive(filterParams)) {
|
||||||
specList.add(TargetSpecifications.hasTags(filterParams.getFilterByTagNames(),
|
specList.add(TargetSpecifications.hasTags(filterParams.getFilterByTagNames(),
|
||||||
filterParams.getSelectTargetWithNoTag()));
|
filterParams.getSelectTargetWithNoTag()));
|
||||||
}
|
}
|
||||||
return specList;
|
return specList;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isHasTagsFilterActive(final FilterParams filterParams) {
|
private static boolean hasTagsFilterActive(final FilterParams filterParams) {
|
||||||
return ((filterParams.getSelectTargetWithNoTag() != null) && filterParams.getSelectTargetWithNoTag())
|
return ((filterParams.getSelectTargetWithNoTag() != null) && filterParams.getSelectTargetWithNoTag())
|
||||||
|| ((filterParams.getFilterByTagNames() != null) && (filterParams.getFilterByTagNames().length > 0));
|
|| ((filterParams.getFilterByTagNames() != null) && (filterParams.getFilterByTagNames().length > 0));
|
||||||
}
|
}
|
||||||
@@ -520,7 +520,7 @@ public class JpaTargetManagement implements TargetManagement {
|
|||||||
// all are already assigned -> unassign
|
// all are already assigned -> unassign
|
||||||
if (alreadyAssignedTargets.size() == allTargets.size()) {
|
if (alreadyAssignedTargets.size() == allTargets.size()) {
|
||||||
alreadyAssignedTargets.forEach(target -> target.removeTag(tag));
|
alreadyAssignedTargets.forEach(target -> target.removeTag(tag));
|
||||||
return new TargetTagAssignmentResult(0, 0, alreadyAssignedTargets.size(), Collections.emptyList(),
|
return new TargetTagAssignmentResult(0, Collections.emptyList(),
|
||||||
Collections.unmodifiableList(alreadyAssignedTargets), tag);
|
Collections.unmodifiableList(alreadyAssignedTargets), tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -528,7 +528,6 @@ public class JpaTargetManagement implements TargetManagement {
|
|||||||
// some or none are assigned -> assign
|
// some or none are assigned -> assign
|
||||||
allTargets.forEach(target -> target.addTag(tag));
|
allTargets.forEach(target -> target.addTag(tag));
|
||||||
final TargetTagAssignmentResult result = new TargetTagAssignmentResult(alreadyAssignedTargets.size(),
|
final TargetTagAssignmentResult result = new TargetTagAssignmentResult(alreadyAssignedTargets.size(),
|
||||||
allTargets.size(), 0,
|
|
||||||
Collections
|
Collections
|
||||||
.unmodifiableList(allTargets.stream().map(targetRepository::save).collect(Collectors.toList())),
|
.unmodifiableList(allTargets.stream().map(targetRepository::save).collect(Collectors.toList())),
|
||||||
Collections.emptyList(), tag);
|
Collections.emptyList(), tag);
|
||||||
@@ -776,7 +775,7 @@ public class JpaTargetManagement implements TargetManagement {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<Target> get(final long id) {
|
public Optional<Target> get(final long id) {
|
||||||
return targetRepository.findById(id).map(t -> (Target) t);
|
return targetRepository.findById(id).map(t -> t);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ public class OnlineDsAssignmentStrategy extends AbstractDsAssignmentStrategy {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
void sendTargetUpdatedEvents(final DistributionSet set, final List<JpaTarget> targets) {
|
void sendTargetUpdatedEvents(final DistributionSet set, final List<JpaTarget> targets) {
|
||||||
targets.stream().forEach(target -> {
|
targets.forEach(target -> {
|
||||||
target.setUpdateStatus(TargetUpdateStatus.PENDING);
|
target.setUpdateStatus(TargetUpdateStatus.PENDING);
|
||||||
sendTargetUpdatedEvent(target);
|
sendTargetUpdatedEvent(target);
|
||||||
});
|
});
|
||||||
@@ -77,7 +77,7 @@ public class OnlineDsAssignmentStrategy extends AbstractDsAssignmentStrategy {
|
|||||||
@Override
|
@Override
|
||||||
void sendDeploymentEvents(final List<DistributionSetAssignmentResult> assignmentResults) {
|
void sendDeploymentEvents(final List<DistributionSetAssignmentResult> assignmentResults) {
|
||||||
if (isMultiAssignmentsEnabled()) {
|
if (isMultiAssignmentsEnabled()) {
|
||||||
sendDeploymentEvent(assignmentResults.stream().flatMap(result -> result.getActions().stream())
|
sendDeploymentEvent(assignmentResults.stream().flatMap(result -> result.getAssignedEntity().stream())
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
} else {
|
} else {
|
||||||
assignmentResults.forEach(this::sendDistributionSetAssignedEvent);
|
assignmentResults.forEach(this::sendDistributionSetAssignedEvent);
|
||||||
@@ -170,7 +170,7 @@ public class OnlineDsAssignmentStrategy extends AbstractDsAssignmentStrategy {
|
|||||||
|
|
||||||
private DistributionSetAssignmentResult sendDistributionSetAssignedEvent(
|
private DistributionSetAssignmentResult sendDistributionSetAssignedEvent(
|
||||||
final DistributionSetAssignmentResult assignmentResult) {
|
final DistributionSetAssignmentResult assignmentResult) {
|
||||||
final List<Action> filteredActions = filterCancellations(assignmentResult.getActions())
|
final List<Action> filteredActions = filterCancellations(assignmentResult.getAssignedEntity())
|
||||||
.filter(action -> !hasPendingCancellations(action.getTarget())).collect(Collectors.toList());
|
.filter(action -> !hasPendingCancellations(action.getTarget())).collect(Collectors.toList());
|
||||||
final DistributionSet set = assignmentResult.getDistributionSet();
|
final DistributionSet set = assignmentResult.getDistributionSet();
|
||||||
sendTargetAssignDistributionSetEvent(set.getTenant(), set.getId(), filteredActions);
|
sendTargetAssignDistributionSetEvent(set.getTenant(), set.getId(), filteredActions);
|
||||||
|
|||||||
@@ -666,16 +666,16 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration {
|
|||||||
DeploymentManagement deploymentManagement(final EntityManager entityManager,
|
DeploymentManagement deploymentManagement(final EntityManager entityManager,
|
||||||
final ActionRepository actionRepository, final DistributionSetRepository distributionSetRepository,
|
final ActionRepository actionRepository, final DistributionSetRepository distributionSetRepository,
|
||||||
final TargetRepository targetRepository, final ActionStatusRepository actionStatusRepository,
|
final TargetRepository targetRepository, final ActionStatusRepository actionStatusRepository,
|
||||||
final TargetManagement targetManagement, final AuditorAware<String> auditorProvider,
|
final AuditorAware<String> auditorProvider, final EventPublisherHolder eventPublisherHolder,
|
||||||
final EventPublisherHolder eventPublisherHolder, final AfterTransactionCommitExecutor afterCommit,
|
final AfterTransactionCommitExecutor afterCommit, final VirtualPropertyReplacer virtualPropertyReplacer,
|
||||||
final VirtualPropertyReplacer virtualPropertyReplacer, final PlatformTransactionManager txManager,
|
final PlatformTransactionManager txManager,
|
||||||
final TenantConfigurationManagement tenantConfigurationManagement, final QuotaManagement quotaManagement,
|
final TenantConfigurationManagement tenantConfigurationManagement, final QuotaManagement quotaManagement,
|
||||||
final SystemSecurityContext systemSecurityContext, final TenantAware tenantAware,
|
final SystemSecurityContext systemSecurityContext, final TenantAware tenantAware,
|
||||||
final JpaProperties properties) {
|
final JpaProperties properties) {
|
||||||
return new JpaDeploymentManagement(entityManager, actionRepository, distributionSetRepository, targetRepository,
|
return new JpaDeploymentManagement(entityManager, actionRepository, distributionSetRepository, targetRepository,
|
||||||
actionStatusRepository, targetManagement, auditorProvider, eventPublisherHolder, afterCommit,
|
actionStatusRepository, auditorProvider, eventPublisherHolder, afterCommit, virtualPropertyReplacer,
|
||||||
virtualPropertyReplacer, txManager, tenantConfigurationManagement, quotaManagement,
|
txManager, tenantConfigurationManagement, quotaManagement, systemSecurityContext, tenantAware,
|
||||||
systemSecurityContext, tenantAware, properties.getDatabase());
|
properties.getDatabase());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -493,8 +493,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
assertThat(
|
assertThat(
|
||||||
controllerManagement.hasTargetArtifactAssigned(savedTarget.getControllerId(), artifact.getSha1Hash()))
|
controllerManagement.hasTargetArtifactAssigned(savedTarget.getControllerId(), artifact.getSha1Hash()))
|
||||||
.isFalse();
|
.isFalse();
|
||||||
savedTarget = assignDistributionSet(ds.getId(), savedTarget.getControllerId()).getAssignedEntity().iterator()
|
savedTarget = getFirstAssignedTarget(assignDistributionSet(ds.getId(), savedTarget.getControllerId()));
|
||||||
.next();
|
|
||||||
assertThat(
|
assertThat(
|
||||||
controllerManagement.hasTargetArtifactAssigned(savedTarget.getControllerId(), artifact.getSha1Hash()))
|
controllerManagement.hasTargetArtifactAssigned(savedTarget.getControllerId(), artifact.getSha1Hash()))
|
||||||
.isTrue();
|
.isTrue();
|
||||||
@@ -1056,7 +1055,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
final DistributionSet testDs = testdataFactory.createDistributionSet("1");
|
final DistributionSet testDs = testdataFactory.createDistributionSet("1");
|
||||||
final List<Target> testTarget = testdataFactory.createTargets(1);
|
final List<Target> testTarget = testdataFactory.createTargets(1);
|
||||||
|
|
||||||
final Long actionId = assignDistributionSet(testDs, testTarget).getActionIds().get(0);
|
final Long actionId = getFirstAssignedActionId(assignDistributionSet(testDs, testTarget));
|
||||||
|
|
||||||
controllerManagement.addUpdateActionStatus(entityFactory.actionStatus().create(actionId)
|
controllerManagement.addUpdateActionStatus(entityFactory.actionStatus().create(actionId)
|
||||||
.status(Action.Status.RUNNING).messages(Lists.newArrayList("proceeding message 1")));
|
.status(Action.Status.RUNNING).messages(Lists.newArrayList("proceeding message 1")));
|
||||||
@@ -1084,8 +1083,8 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
final int maxStatusEntries = quotaManagement.getMaxStatusEntriesPerAction() - 1;
|
final int maxStatusEntries = quotaManagement.getMaxStatusEntriesPerAction() - 1;
|
||||||
|
|
||||||
// test for informational status
|
// test for informational status
|
||||||
final Long actionId1 = assignDistributionSet(testdataFactory.createDistributionSet("ds1"),
|
final Long actionId1 = getFirstAssignedActionId(assignDistributionSet(
|
||||||
testdataFactory.createTargets(1, "t1")).getActionIds().get(0);
|
testdataFactory.createDistributionSet("ds1"), testdataFactory.createTargets(1, "t1")));
|
||||||
assertThat(actionId1).isNotNull();
|
assertThat(actionId1).isNotNull();
|
||||||
for (int i = 0; i < maxStatusEntries; ++i) {
|
for (int i = 0; i < maxStatusEntries; ++i) {
|
||||||
controllerManagement.addInformationalActionStatus(entityFactory.actionStatus().create(actionId1)
|
controllerManagement.addInformationalActionStatus(entityFactory.actionStatus().create(actionId1)
|
||||||
@@ -1095,8 +1094,8 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
.addInformationalActionStatus(entityFactory.actionStatus().create(actionId1).status(Status.WARNING)));
|
.addInformationalActionStatus(entityFactory.actionStatus().create(actionId1).status(Status.WARNING)));
|
||||||
|
|
||||||
// test for update status (and mixed case)
|
// test for update status (and mixed case)
|
||||||
final Long actionId2 = assignDistributionSet(testdataFactory.createDistributionSet("ds2"),
|
final Long actionId2 = getFirstAssignedActionId(assignDistributionSet(
|
||||||
testdataFactory.createTargets(1, "t2")).getActionIds().get(0);
|
testdataFactory.createDistributionSet("ds2"), testdataFactory.createTargets(1, "t2")));
|
||||||
assertThat(actionId2).isNotEqualTo(actionId1);
|
assertThat(actionId2).isNotEqualTo(actionId1);
|
||||||
for (int i = 0; i < maxStatusEntries; ++i) {
|
for (int i = 0; i < maxStatusEntries; ++i) {
|
||||||
controllerManagement.addUpdateActionStatus(entityFactory.actionStatus().create(actionId2)
|
controllerManagement.addUpdateActionStatus(entityFactory.actionStatus().create(actionId2)
|
||||||
@@ -1118,8 +1117,8 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
|
|
||||||
final int maxMessages = quotaManagement.getMaxMessagesPerActionStatus();
|
final int maxMessages = quotaManagement.getMaxMessagesPerActionStatus();
|
||||||
|
|
||||||
final Long actionId = assignDistributionSet(testdataFactory.createDistributionSet("ds1"),
|
final Long actionId = getFirstAssignedActionId(
|
||||||
testdataFactory.createTargets(1)).getActionIds().get(0);
|
assignDistributionSet(testdataFactory.createDistributionSet("ds1"), testdataFactory.createTargets(1)));
|
||||||
assertThat(actionId).isNotNull();
|
assertThat(actionId).isNotNull();
|
||||||
|
|
||||||
final List<String> messages = Lists.newArrayList();
|
final List<String> messages = Lists.newArrayList();
|
||||||
@@ -1331,7 +1330,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
testdataFactory.createTarget(knownControllerId);
|
testdataFactory.createTarget(knownControllerId);
|
||||||
final DistributionSetAssignmentResult assignmentResult = deploymentManagement.assignDistributionSet(
|
final DistributionSetAssignmentResult assignmentResult = deploymentManagement.assignDistributionSet(
|
||||||
knownDistributionSet.getId(), ActionType.FORCED, 0, Collections.singleton(knownControllerId));
|
knownDistributionSet.getId(), ActionType.FORCED, 0, Collections.singleton(knownControllerId));
|
||||||
final Long actionId = assignmentResult.getActionIds().get(0);
|
final Long actionId = getFirstAssignedActionId(assignmentResult);
|
||||||
controllerManagement.updateActionExternalRef(actionId, knownExternalref);
|
controllerManagement.updateActionExternalRef(actionId, knownExternalref);
|
||||||
|
|
||||||
allExternalRef.add(knownExternalref);
|
allExternalRef.add(knownExternalref);
|
||||||
@@ -1432,7 +1431,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
final Long forcedDistributionSetId = testdataFactory.createDistributionSet("forcedDs1").getId();
|
final Long forcedDistributionSetId = testdataFactory.createDistributionSet("forcedDs1").getId();
|
||||||
final DistributionSetAssignmentResult assignmentResult = assignDistributionSet(forcedDistributionSetId,
|
final DistributionSetAssignmentResult assignmentResult = assignDistributionSet(forcedDistributionSetId,
|
||||||
DEFAULT_CONTROLLER_ID, Action.ActionType.SOFT);
|
DEFAULT_CONTROLLER_ID, Action.ActionType.SOFT);
|
||||||
addUpdateActionStatus(assignmentResult.getActions().get(0).getId(), DEFAULT_CONTROLLER_ID, Status.FINISHED);
|
addUpdateActionStatus(getFirstAssignedActionId(assignmentResult), DEFAULT_CONTROLLER_ID, Status.FINISHED);
|
||||||
assertAssignedDistributionSetId(DEFAULT_CONTROLLER_ID, forcedDistributionSetId);
|
assertAssignedDistributionSetId(DEFAULT_CONTROLLER_ID, forcedDistributionSetId);
|
||||||
assertInstalledDistributionSetId(DEFAULT_CONTROLLER_ID, forcedDistributionSetId);
|
assertInstalledDistributionSetId(DEFAULT_CONTROLLER_ID, forcedDistributionSetId);
|
||||||
assertNoActiveActionsExistsForControllerId(DEFAULT_CONTROLLER_ID);
|
assertNoActiveActionsExistsForControllerId(DEFAULT_CONTROLLER_ID);
|
||||||
@@ -1472,4 +1471,4 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
assertThat(actionRepository.activeActionExistsForControllerId(controllerId)).isEqualTo(false);
|
assertThat(actionRepository.activeActionExistsForControllerId(controllerId)).isEqualTo(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,13 +98,14 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
@ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1) })
|
@ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1) })
|
||||||
public void entityQueriesReferringToNotExistingEntitiesThrowsException() {
|
public void entityQueriesReferringToNotExistingEntitiesThrowsException() {
|
||||||
final Target target = testdataFactory.createTarget();
|
final Target target = testdataFactory.createTarget();
|
||||||
|
final String dsName = "DistributionSet";
|
||||||
|
|
||||||
verifyThrownExceptionBy(() -> deploymentManagement.assignDistributionSet(NOT_EXIST_IDL,
|
verifyThrownExceptionBy(() -> deploymentManagement.assignDistributionSet(NOT_EXIST_IDL,
|
||||||
Arrays.asList(new TargetWithActionType(target.getControllerId()))), "DistributionSet");
|
Collections.singletonList(new TargetWithActionType(target.getControllerId()))), dsName);
|
||||||
verifyThrownExceptionBy(() -> deploymentManagement.assignDistributionSet(NOT_EXIST_IDL,
|
verifyThrownExceptionBy(() -> deploymentManagement.assignDistributionSet(NOT_EXIST_IDL,
|
||||||
Arrays.asList(new TargetWithActionType(target.getControllerId())), "xxx"), "DistributionSet");
|
Collections.singletonList(new TargetWithActionType(target.getControllerId())), "xxx"), dsName);
|
||||||
verifyThrownExceptionBy(() -> deploymentManagement.assignDistributionSet(NOT_EXIST_IDL, ActionType.FORCED,
|
verifyThrownExceptionBy(() -> deploymentManagement.assignDistributionSet(NOT_EXIST_IDL, ActionType.FORCED,
|
||||||
System.currentTimeMillis(), Arrays.asList(target.getControllerId())), "DistributionSet");
|
System.currentTimeMillis(), Collections.singletonList(target.getControllerId())), dsName);
|
||||||
|
|
||||||
verifyThrownExceptionBy(() -> deploymentManagement.cancelAction(NOT_EXIST_IDL), "Action");
|
verifyThrownExceptionBy(() -> deploymentManagement.cancelAction(NOT_EXIST_IDL), "Action");
|
||||||
verifyThrownExceptionBy(() -> deploymentManagement.countActionsByTarget(NOT_EXIST_ID), "Target");
|
verifyThrownExceptionBy(() -> deploymentManagement.countActionsByTarget(NOT_EXIST_ID), "Target");
|
||||||
@@ -128,7 +129,7 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
new ArrayList<DistributionSetTag>());
|
new ArrayList<DistributionSetTag>());
|
||||||
final List<Target> testTarget = testdataFactory.createTargets(1);
|
final List<Target> testTarget = testdataFactory.createTargets(1);
|
||||||
// one action with one action status is generated
|
// one action with one action status is generated
|
||||||
final Long actionId = assignDistributionSet(testDs, testTarget).getActionIds().get(0);
|
final Long actionId = getFirstAssignedActionId(assignDistributionSet(testDs, testTarget));
|
||||||
final Action action = deploymentManagement.findActionWithDetails(actionId).get();
|
final Action action = deploymentManagement.findActionWithDetails(actionId).get();
|
||||||
|
|
||||||
assertThat(action.getDistributionSet()).as("DistributionSet in action").isNotNull();
|
assertThat(action.getDistributionSet()).as("DistributionSet in action").isNotNull();
|
||||||
@@ -145,7 +146,7 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
new ArrayList<DistributionSetTag>());
|
new ArrayList<DistributionSetTag>());
|
||||||
final List<Target> testTarget = testdataFactory.createTargets(1);
|
final List<Target> testTarget = testdataFactory.createTargets(1);
|
||||||
// one action with one action status is generated
|
// one action with one action status is generated
|
||||||
final Long actionId = assignDistributionSet(testDs, testTarget).getActionIds().get(0);
|
final Long actionId = getFirstAssignedActionId(assignDistributionSet(testDs, testTarget));
|
||||||
|
|
||||||
// act
|
// act
|
||||||
final Slice<Action> actions = deploymentManagement.findActionsByTarget(testTarget.get(0).getControllerId(),
|
final Slice<Action> actions = deploymentManagement.findActionsByTarget(testTarget.get(0).getControllerId(),
|
||||||
@@ -190,11 +191,10 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
@Test
|
@Test
|
||||||
@Description("Test verifies that action-states of an action are found by using id-based search.")
|
@Description("Test verifies that action-states of an action are found by using id-based search.")
|
||||||
public void findActionStatusByActionId() {
|
public void findActionStatusByActionId() {
|
||||||
final DistributionSet testDs = testdataFactory.createDistributionSet("TestDs", "1.0",
|
final DistributionSet testDs = testdataFactory.createDistributionSet("TestDs", "1.0", Collections.emptyList());
|
||||||
new ArrayList<DistributionSetTag>());
|
|
||||||
final List<Target> testTarget = testdataFactory.createTargets(1);
|
final List<Target> testTarget = testdataFactory.createTargets(1);
|
||||||
// one action with one action status is generated
|
// one action with one action status is generated
|
||||||
final Long actionId = assignDistributionSet(testDs, testTarget).getActionIds().get(0);
|
final Long actionId = getFirstAssignedActionId(assignDistributionSet(testDs, testTarget));
|
||||||
final Slice<Action> actions = deploymentManagement.findActionsByTarget(testTarget.get(0).getControllerId(),
|
final Slice<Action> actions = deploymentManagement.findActionsByTarget(testTarget.get(0).getControllerId(),
|
||||||
PAGE);
|
PAGE);
|
||||||
final ActionStatus expectedActionStatus = ((JpaAction) actions.getContent().get(0)).getActionStatus().get(0);
|
final ActionStatus expectedActionStatus = ((JpaAction) actions.getContent().get(0)).getActionStatus().get(0);
|
||||||
@@ -213,10 +213,10 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
new ArrayList<DistributionSetTag>());
|
new ArrayList<DistributionSetTag>());
|
||||||
final List<Target> testTarget = testdataFactory.createTargets(1);
|
final List<Target> testTarget = testdataFactory.createTargets(1);
|
||||||
// one action with one action status is generated
|
// one action with one action status is generated
|
||||||
final Long actionId = assignDistributionSet(testDs, testTarget).getActionIds().get(0);
|
final Long actionId = getFirstAssignedActionId(assignDistributionSet(testDs, testTarget));
|
||||||
// create action-status entry with one message
|
// create action-status entry with one message
|
||||||
controllerManagement.addUpdateActionStatus(entityFactory.actionStatus().create(actionId)
|
controllerManagement.addUpdateActionStatus(entityFactory.actionStatus().create(actionId)
|
||||||
.status(Action.Status.FINISHED).messages(Arrays.asList("finished message")));
|
.status(Action.Status.FINISHED).messages(Collections.singletonList("finished message")));
|
||||||
final Page<ActionStatus> actionStates = deploymentManagement.findActionStatusByAction(PAGE, actionId);
|
final Page<ActionStatus> actionStates = deploymentManagement.findActionStatusByAction(PAGE, actionId);
|
||||||
|
|
||||||
// find newly created action-status entry with message
|
// find newly created action-status entry with message
|
||||||
@@ -465,12 +465,14 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
|
|
||||||
final long current = System.currentTimeMillis();
|
final long current = System.currentTimeMillis();
|
||||||
final List<Target> targets = deploymentManagement.offlineAssignedDistributionSet(ds.getId(), controllerIds)
|
final List<Target> targets = deploymentManagement.offlineAssignedDistributionSet(ds.getId(), controllerIds)
|
||||||
.getAssignedEntity();
|
.getAssignedEntity().stream().map(Action::getTarget).collect(Collectors.toList());;
|
||||||
assertThat(actionRepository.count()).isEqualTo(20);
|
assertThat(actionRepository.count()).isEqualTo(20);
|
||||||
assertThat(actionRepository.findByDistributionSetId(PAGE, ds.getId())).as("Offline actions are not active")
|
assertThat(actionRepository.findByDistributionSetId(PAGE, ds.getId())).as("Offline actions are not active")
|
||||||
.allMatch(action -> !action.isActive());
|
.allMatch(action -> !action.isActive());
|
||||||
assertThat(targetManagement.findByInstalledDistributionSet(PAGE, ds.getId()).getContent()).containsAll(targets)
|
|
||||||
.hasSize(10).containsAll(targetManagement.findByAssignedDistributionSet(PAGE, ds.getId()))
|
assertThat(targetManagement.findByInstalledDistributionSet(PAGE, ds.getId()).getContent())
|
||||||
|
.usingElementComparator(controllerIdComparator()).containsAll(targets).hasSize(10)
|
||||||
|
.containsAll(targetManagement.findByAssignedDistributionSet(PAGE, ds.getId()))
|
||||||
.as("InstallationDate set").allMatch(target -> target.getInstallationDate() >= current)
|
.as("InstallationDate set").allMatch(target -> target.getInstallationDate() >= current)
|
||||||
.as("TargetUpdateStatus IN_SYNC")
|
.as("TargetUpdateStatus IN_SYNC")
|
||||||
.allMatch(target -> TargetUpdateStatus.IN_SYNC.equals(target.getUpdateStatus()))
|
.allMatch(target -> TargetUpdateStatus.IN_SYNC.equals(target.getUpdateStatus()))
|
||||||
@@ -630,7 +632,7 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
final SoftwareModule os = testdataFactory.createSoftwareModuleOs();
|
final SoftwareModule os = testdataFactory.createSoftwareModuleOs();
|
||||||
|
|
||||||
final DistributionSet incomplete = distributionSetManagement.create(entityFactory.distributionSet().create()
|
final DistributionSet incomplete = distributionSetManagement.create(entityFactory.distributionSet().create()
|
||||||
.name("incomplete").version("v1").type(standardDsType).modules(Arrays.asList(ah.getId())));
|
.name("incomplete").version("v1").type(standardDsType).modules(Collections.singletonList(ah.getId())));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
assignDistributionSet(incomplete, targets);
|
assignDistributionSet(incomplete, targets);
|
||||||
@@ -698,7 +700,9 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
// test the content of different lists
|
// test the content of different lists
|
||||||
assertThat(allFoundTargets).as("content of founded target is wrong").containsAll(deployedTargetsFromDB)
|
assertThat(allFoundTargets).as("content of founded target is wrong").containsAll(deployedTargetsFromDB)
|
||||||
.containsAll(undeployedTargetsFromDB);
|
.containsAll(undeployedTargetsFromDB);
|
||||||
assertThat(deployedTargetsFromDB).as("content of deployed target is wrong").containsAll(savedDeployedTargets)
|
|
||||||
|
assertThat(deployedTargetsFromDB).as("content of deployed target is wrong")
|
||||||
|
.usingElementComparator(controllerIdComparator()).containsAll(savedDeployedTargets)
|
||||||
.doesNotContain(Iterables.toArray(undeployedTargetsFromDB, JpaTarget.class));
|
.doesNotContain(Iterables.toArray(undeployedTargetsFromDB, JpaTarget.class));
|
||||||
assertThat(undeployedTargetsFromDB).as("content of undeployed target is wrong").containsAll(savedNakedTargets)
|
assertThat(undeployedTargetsFromDB).as("content of undeployed target is wrong").containsAll(savedNakedTargets)
|
||||||
.doesNotContain(Iterables.toArray(deployedTargetsFromDB, JpaTarget.class));
|
.doesNotContain(Iterables.toArray(deployedTargetsFromDB, JpaTarget.class));
|
||||||
@@ -769,15 +773,16 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
// remove updActB from
|
// remove updActB from
|
||||||
// activeActions, add a corresponding cancelAction and another
|
// activeActions, add a corresponding cancelAction and another
|
||||||
// UpdateAction for dsA
|
// UpdateAction for dsA
|
||||||
final Iterable<Target> deployed2DS = assignDistributionSet(dsA, deployResWithDsB.getDeployedTargets())
|
final List<Target> deployed2DS = assignDistributionSet(dsA, deployResWithDsB.getDeployedTargets())
|
||||||
.getAssignedEntity();
|
.getAssignedEntity().stream().map(Action::getTarget).collect(Collectors.toList());
|
||||||
actionRepository.findByDistributionSetId(pageRequest, dsA.getId()).getContent().get(1);
|
actionRepository.findByDistributionSetId(pageRequest, dsA.getId()).getContent().get(1);
|
||||||
|
|
||||||
// get final updated version of targets
|
// get final updated version of targets
|
||||||
final List<Target> deployResWithDsBTargets = targetManagement.getByControllerID(deployResWithDsB
|
final List<Target> deployResWithDsBTargets = targetManagement.getByControllerID(deployResWithDsB
|
||||||
.getDeployedTargets().stream().map(Target::getControllerId).collect(Collectors.toList()));
|
.getDeployedTargets().stream().map(Target::getControllerId).collect(Collectors.toList()));
|
||||||
|
|
||||||
assertThat(deployed2DS).as("deployed ds is wrong").containsAll(deployResWithDsBTargets);
|
assertThat(deployed2DS).as("deployed ds is wrong").usingElementComparator(controllerIdComparator())
|
||||||
|
.containsAll(deployResWithDsBTargets);
|
||||||
assertThat(deployed2DS).as("deployed ds is wrong").hasSameSizeAs(deployResWithDsBTargets);
|
assertThat(deployed2DS).as("deployed ds is wrong").hasSameSizeAs(deployResWithDsBTargets);
|
||||||
|
|
||||||
for (final Target t_ : deployed2DS) {
|
for (final Target t_ : deployed2DS) {
|
||||||
@@ -892,10 +897,11 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
|
|
||||||
final DistributionSet dsA = testdataFactory.createDistributionSet("a");
|
final DistributionSet dsA = testdataFactory.createDistributionSet("a");
|
||||||
final DistributionSet dsB = testdataFactory.createDistributionSet("b");
|
final DistributionSet dsB = testdataFactory.createDistributionSet("b");
|
||||||
List<Target> targs = Arrays.asList(testdataFactory.createTarget("target-id-A"));
|
List<Target> targs = Collections.singletonList(testdataFactory.createTarget("target-id-A"));
|
||||||
|
|
||||||
// doing the assignment
|
// doing the assignment
|
||||||
targs = assignDistributionSet(dsA, targs).getAssignedEntity();
|
targs = assignDistributionSet(dsA, targs).getAssignedEntity().stream().map(Action::getTarget)
|
||||||
|
.collect(Collectors.toList());
|
||||||
Target targ = targetManagement.getByControllerID(targs.iterator().next().getControllerId()).get();
|
Target targ = targetManagement.getByControllerID(targs.iterator().next().getControllerId()).get();
|
||||||
|
|
||||||
// checking the revisions of the created entities
|
// checking the revisions of the created entities
|
||||||
@@ -934,7 +940,8 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
assertEquals("wrong installed ds", dsA,
|
assertEquals("wrong installed ds", dsA,
|
||||||
deploymentManagement.getInstalledDistributionSet(targ.getControllerId()).get());
|
deploymentManagement.getInstalledDistributionSet(targ.getControllerId()).get());
|
||||||
|
|
||||||
targs = assignDistributionSet(dsB.getId(), "target-id-A").getAssignedEntity();
|
targs = assignDistributionSet(dsB.getId(), "target-id-A").getAssignedEntity().stream().map(Action::getTarget)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
targ = targs.iterator().next();
|
targ = targs.iterator().next();
|
||||||
|
|
||||||
@@ -962,7 +969,7 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
assertThat(dsA.getOptLockRevision()).as("lock revision is wrong")
|
assertThat(dsA.getOptLockRevision()).as("lock revision is wrong")
|
||||||
.isEqualTo(distributionSetManagement.getWithDetails(dsA.getId()).get().getOptLockRevision());
|
.isEqualTo(distributionSetManagement.getWithDetails(dsA.getId()).get().getOptLockRevision());
|
||||||
|
|
||||||
assignDistributionSet(dsA, Arrays.asList(targ));
|
assignDistributionSet(dsA, Collections.singletonList(targ));
|
||||||
|
|
||||||
assertThat(dsA.getOptLockRevision()).as("lock revision is wrong")
|
assertThat(dsA.getOptLockRevision()).as("lock revision is wrong")
|
||||||
.isEqualTo(distributionSetManagement.getWithDetails(dsA.getId()).get().getOptLockRevision());
|
.isEqualTo(distributionSetManagement.getWithDetails(dsA.getId()).get().getOptLockRevision());
|
||||||
@@ -978,8 +985,8 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement.assignDistributionSet(
|
final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement.assignDistributionSet(
|
||||||
ds.getId(), ActionType.SOFT,
|
ds.getId(), ActionType.SOFT,
|
||||||
org.eclipse.hawkbit.repository.model.RepositoryModelConstants.NO_FORCE_TIME,
|
org.eclipse.hawkbit.repository.model.RepositoryModelConstants.NO_FORCE_TIME,
|
||||||
Arrays.asList(target.getControllerId()));
|
Collections.singletonList(target.getControllerId()));
|
||||||
final Long actionId = assignDistributionSet.getActionIds().get(0);
|
final Long actionId = getFirstAssignedActionId(assignDistributionSet);
|
||||||
// verify preparation
|
// verify preparation
|
||||||
Action findAction = deploymentManagement.findAction(actionId).get();
|
Action findAction = deploymentManagement.findAction(actionId).get();
|
||||||
assertThat(findAction.getActionType()).as("action type is wrong").isEqualTo(ActionType.SOFT);
|
assertThat(findAction.getActionType()).as("action type is wrong").isEqualTo(ActionType.SOFT);
|
||||||
@@ -1002,8 +1009,8 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement.assignDistributionSet(
|
final DistributionSetAssignmentResult assignDistributionSet = deploymentManagement.assignDistributionSet(
|
||||||
ds.getId(), ActionType.FORCED,
|
ds.getId(), ActionType.FORCED,
|
||||||
org.eclipse.hawkbit.repository.model.RepositoryModelConstants.NO_FORCE_TIME,
|
org.eclipse.hawkbit.repository.model.RepositoryModelConstants.NO_FORCE_TIME,
|
||||||
Arrays.asList(target.getControllerId()));
|
Collections.singletonList(target.getControllerId()));
|
||||||
final Long actionId = assignDistributionSet.getActionIds().get(0);
|
final Long actionId = getFirstAssignedActionId(assignDistributionSet);
|
||||||
// verify perparation
|
// verify perparation
|
||||||
Action findAction = deploymentManagement.findAction(actionId).get();
|
Action findAction = deploymentManagement.findAction(actionId).get();
|
||||||
assertThat(findAction.getActionType()).as("action type is wrong").isEqualTo(ActionType.FORCED);
|
assertThat(findAction.getActionType()).as("action type is wrong").isEqualTo(ActionType.FORCED);
|
||||||
@@ -1016,6 +1023,50 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
findAction = deploymentManagement.findAction(actionId).get();
|
findAction = deploymentManagement.findAction(actionId).get();
|
||||||
assertThat(findAction.getActionType()).as("action type is wrong").isEqualTo(ActionType.FORCED);
|
assertThat(findAction.getActionType()).as("action type is wrong").isEqualTo(ActionType.FORCED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Description("Tests the computation of already assigned entities returned as a result of an assignment")
|
||||||
|
public void testAlreadyAssignedAndAssignedActionsInAssignmentResult(){
|
||||||
|
// create target1, distributionSet, assign ds to target1 and finish update (close all actions)
|
||||||
|
final Action action = prepareFinishedUpdate("target1", "ds", false);
|
||||||
|
final Target target2 = testdataFactory.createTarget("target2");
|
||||||
|
final Target target3 = testdataFactory.createTarget("target3");
|
||||||
|
|
||||||
|
// assign ds to target2, but don't finish update (actions should be still open)
|
||||||
|
assignDistributionSet(action.getDistributionSet().getId(), target2.getControllerId());
|
||||||
|
|
||||||
|
final DistributionSetAssignmentResult assignmentResult = deploymentManagement.assignDistributionSet(
|
||||||
|
action.getDistributionSet().getId(),
|
||||||
|
Arrays.asList(new TargetWithActionType(action.getTarget().getControllerId()),
|
||||||
|
new TargetWithActionType(target3.getControllerId())));
|
||||||
|
|
||||||
|
assertThat(assignmentResult).isNotNull();
|
||||||
|
assertThat(assignmentResult.getTotal()).as("Total count of assigned and already assigned targets").isEqualTo(2);
|
||||||
|
assertThat(assignmentResult.getAssigned()).as("Total count of assigned targets").isEqualTo(1);
|
||||||
|
assertThat(assignmentResult.getAlreadyAssigned()).as("Total count of already assigned targets").isEqualTo(1);
|
||||||
|
assertThat(assignmentResult.getAssignedEntity()).isNotEmpty();
|
||||||
|
assertThat(assignmentResult.getAssignedEntity()).allMatch(
|
||||||
|
a -> a.getTarget().equals(target3) && a.getDistributionSet().equals(action.getDistributionSet()));
|
||||||
|
assertThat(assignmentResult.getAssignedEntity())
|
||||||
|
.noneMatch(a -> a.getTarget().getControllerId().equals("target1"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Description("Verify that the DistributionSetAssignmentResult not contains already assigned targets.")
|
||||||
|
public void verifyDistributionSetAssignmentResultNotContainsAlreadyAssignedTargets() {
|
||||||
|
final DistributionSet dsToTargetAssigned = testdataFactory.createDistributionSet("ds-3");
|
||||||
|
|
||||||
|
// create assigned DS
|
||||||
|
final Target savedTarget = testdataFactory.createTarget();
|
||||||
|
DistributionSetAssignmentResult assignmentResult = assignDistributionSet(dsToTargetAssigned.getId(),
|
||||||
|
savedTarget.getControllerId());
|
||||||
|
assertThat(assignmentResult.getAssignedEntity()).hasSize(1);
|
||||||
|
|
||||||
|
assignmentResult = assignDistributionSet(dsToTargetAssigned.getId(), savedTarget.getControllerId());
|
||||||
|
assertThat(assignmentResult.getAssignedEntity()).hasSize(0);
|
||||||
|
|
||||||
|
assertThat(distributionSetRepository.findAll()).hasSize(1);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper methods that creates 2 lists of targets and a list of distribution
|
* Helper methods that creates 2 lists of targets and a list of distribution
|
||||||
@@ -1059,7 +1110,8 @@ public class DeploymentManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
// assigning all DistributionSet to the Target in the list
|
// assigning all DistributionSet to the Target in the list
|
||||||
// deployedTargets
|
// deployedTargets
|
||||||
for (final DistributionSet ds : dsList) {
|
for (final DistributionSet ds : dsList) {
|
||||||
deployedTargets = assignDistributionSet(ds, deployedTargets).getAssignedEntity();
|
deployedTargets = assignDistributionSet(ds, deployedTargets).getAssignedEntity().stream()
|
||||||
|
.map(Action::getTarget).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
return new DeploymentResult(deployedTargets, nakedTargets, dsList, deployedTargetPrefix, undeployedTargetPrefix,
|
return new DeploymentResult(deployedTargets, nakedTargets, dsList, deployedTargetPrefix, undeployedTargetPrefix,
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet;
|
|||||||
import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata;
|
import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetMetadata;
|
||||||
import org.eclipse.hawkbit.repository.model.Action.Status;
|
import org.eclipse.hawkbit.repository.model.Action.Status;
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSet;
|
import org.eclipse.hawkbit.repository.model.DistributionSet;
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSetAssignmentResult;
|
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSetFilter.DistributionSetFilterBuilder;
|
import org.eclipse.hawkbit.repository.model.DistributionSetFilter.DistributionSetFilterBuilder;
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSetMetadata;
|
import org.eclipse.hawkbit.repository.model.DistributionSetMetadata;
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSetTag;
|
import org.eclipse.hawkbit.repository.model.DistributionSetTag;
|
||||||
@@ -993,23 +992,6 @@ public class DistributionSetManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
assertThat(distributionSetManagement.findByCompleted(PAGE, true).getTotalElements()).isEqualTo(2);
|
assertThat(distributionSetManagement.findByCompleted(PAGE, true).getTotalElements()).isEqualTo(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@Description("Verify that the DistributionSetAssignmentResult not contains already assigned targets.")
|
|
||||||
public void verifyDistributionSetAssignmentResultNotContainsAlreadyAssignedTargets() {
|
|
||||||
final DistributionSet dsToTargetAssigned = testdataFactory.createDistributionSet("ds-3");
|
|
||||||
|
|
||||||
// create assigned DS
|
|
||||||
final Target savedTarget = testdataFactory.createTarget();
|
|
||||||
DistributionSetAssignmentResult assignmentResult = assignDistributionSet(dsToTargetAssigned.getId(),
|
|
||||||
savedTarget.getControllerId());
|
|
||||||
assertThat(assignmentResult.getAssignedEntity()).hasSize(1);
|
|
||||||
|
|
||||||
assignmentResult = assignDistributionSet(dsToTargetAssigned.getId(), savedTarget.getControllerId());
|
|
||||||
assertThat(assignmentResult.getAssignedEntity()).hasSize(0);
|
|
||||||
|
|
||||||
assertThat(distributionSetRepository.findAll()).hasSize(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verify that the find all by ids contains the entities which are looking for")
|
@Description("Verify that the find all by ids contains the entities which are looking for")
|
||||||
@ExpectEvents({ @Expect(type = DistributionSetCreatedEvent.class, count = 12),
|
@ExpectEvents({ @Expect(type = DistributionSetCreatedEvent.class, count = 12),
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
testdataFactory.createTarget(knownControllerId);
|
testdataFactory.createTarget(knownControllerId);
|
||||||
final DistributionSetAssignmentResult assignmentResult = deploymentManagement.assignDistributionSet(
|
final DistributionSetAssignmentResult assignmentResult = deploymentManagement.assignDistributionSet(
|
||||||
knownDistributionSet.getId(), ActionType.FORCED, 0, Collections.singleton(knownControllerId));
|
knownDistributionSet.getId(), ActionType.FORCED, 0, Collections.singleton(knownControllerId));
|
||||||
final Long manuallyAssignedActionId = assignmentResult.getActionIds().get(0);
|
final Long manuallyAssignedActionId = getFirstAssignedActionId(assignmentResult);
|
||||||
|
|
||||||
// create rollout with the same distribution set already assigned
|
// create rollout with the same distribution set already assigned
|
||||||
// start rollout
|
// start rollout
|
||||||
@@ -144,7 +144,7 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
testdataFactory.createTarget(knownControllerId);
|
testdataFactory.createTarget(knownControllerId);
|
||||||
final DistributionSetAssignmentResult assignmentResult = deploymentManagement.assignDistributionSet(
|
final DistributionSetAssignmentResult assignmentResult = deploymentManagement.assignDistributionSet(
|
||||||
firstDistributionSet.getId(), ActionType.FORCED, 0, Collections.singleton(knownControllerId));
|
firstDistributionSet.getId(), ActionType.FORCED, 0, Collections.singleton(knownControllerId));
|
||||||
final Long manuallyAssignedActionId = assignmentResult.getActionIds().get(0);
|
final Long manuallyAssignedActionId = getFirstAssignedActionId(assignmentResult);
|
||||||
|
|
||||||
// create rollout with the same distribution set already assigned
|
// create rollout with the same distribution set already assigned
|
||||||
// start rollout
|
// start rollout
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ public class TargetManagementSearchTest extends AbstractJpaIntegrationTest {
|
|||||||
final String assignedB = targBs.iterator().next().getControllerId();
|
final String assignedB = targBs.iterator().next().getControllerId();
|
||||||
assignDistributionSet(setA.getId(), assignedB);
|
assignDistributionSet(setA.getId(), assignedB);
|
||||||
final String installedC = targCs.iterator().next().getControllerId();
|
final String installedC = targCs.iterator().next().getControllerId();
|
||||||
final Long actionId = assignDistributionSet(installedSet.getId(), assignedC).getActionIds().get(0);
|
final Long actionId = getFirstAssignedActionId(assignDistributionSet(installedSet.getId(), assignedC));
|
||||||
|
|
||||||
// add attributes to match against only attribute value or attribute
|
// add attributes to match against only attribute value or attribute
|
||||||
// value and name
|
// value and name
|
||||||
@@ -578,8 +578,10 @@ public class TargetManagementSearchTest extends AbstractJpaIntegrationTest {
|
|||||||
|
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet("a");
|
final DistributionSet ds = testdataFactory.createDistributionSet("a");
|
||||||
|
|
||||||
targAssigned = Lists.newLinkedList(assignDistributionSet(ds, targAssigned).getAssignedEntity());
|
targAssigned = assignDistributionSet(ds, targAssigned).getAssignedEntity().stream().map(Action::getTarget)
|
||||||
targInstalled = assignDistributionSet(ds, targInstalled).getAssignedEntity();
|
.collect(Collectors.toList());
|
||||||
|
targInstalled = assignDistributionSet(ds, targInstalled).getAssignedEntity().stream().map(Action::getTarget)
|
||||||
|
.collect(Collectors.toList());
|
||||||
targInstalled = testdataFactory
|
targInstalled = testdataFactory
|
||||||
.sendUpdateActionStatusToTargets(targInstalled, Status.FINISHED, Collections.singletonList("installed"))
|
.sendUpdateActionStatusToTargets(targInstalled, Status.FINISHED, Collections.singletonList("installed"))
|
||||||
.stream().map(Action::getTarget).collect(Collectors.toList());
|
.stream().map(Action::getTarget).collect(Collectors.toList());
|
||||||
@@ -598,7 +600,8 @@ public class TargetManagementSearchTest extends AbstractJpaIntegrationTest {
|
|||||||
expected.addAll(targAssigned);
|
expected.addAll(targAssigned);
|
||||||
expected.addAll(notAssigned);
|
expected.addAll(notAssigned);
|
||||||
|
|
||||||
assertThat(result.getContent()).containsExactly(expected.toArray(new Target[0]));
|
assertThat(result.getContent()).usingElementComparator(controllerIdComparator())
|
||||||
|
.containsExactly(expected.toArray(new Target[0]));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -628,8 +631,10 @@ public class TargetManagementSearchTest extends AbstractJpaIntegrationTest {
|
|||||||
|
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet("a");
|
final DistributionSet ds = testdataFactory.createDistributionSet("a");
|
||||||
|
|
||||||
targAssigned = assignDistributionSet(ds, targAssigned).getAssignedEntity();
|
targAssigned = assignDistributionSet(ds, targAssigned).getAssignedEntity().stream().map(Action::getTarget)
|
||||||
targInstalled = assignDistributionSet(ds, targInstalled).getAssignedEntity();
|
.collect(Collectors.toList());
|
||||||
|
targInstalled = assignDistributionSet(ds, targInstalled).getAssignedEntity().stream().map(Action::getTarget)
|
||||||
|
.collect(Collectors.toList());
|
||||||
targInstalled = testdataFactory
|
targInstalled = testdataFactory
|
||||||
.sendUpdateActionStatusToTargets(targInstalled, Status.FINISHED, Collections.singletonList("installed"))
|
.sendUpdateActionStatusToTargets(targInstalled, Status.FINISHED, Collections.singletonList("installed"))
|
||||||
.stream().map(Action::getTarget).collect(Collectors.toList());
|
.stream().map(Action::getTarget).collect(Collectors.toList());
|
||||||
@@ -651,7 +656,8 @@ public class TargetManagementSearchTest extends AbstractJpaIntegrationTest {
|
|||||||
.filter(item -> lastTargetQueryAlwaysOverdue.equals(item.getLastTargetQuery()))
|
.filter(item -> lastTargetQueryAlwaysOverdue.equals(item.getLastTargetQuery()))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
|
|
||||||
assertThat(result.getContent()).containsExactly(expected.toArray(new Target[0]));
|
assertThat(result.getContent()).usingElementComparator(controllerIdComparator())
|
||||||
|
.containsExactly(expected.toArray(new Target[0]));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -701,8 +707,8 @@ public class TargetManagementSearchTest extends AbstractJpaIntegrationTest {
|
|||||||
List<Target> installedtargets = testdataFactory.createTargets(10, "assigned", "assigned");
|
List<Target> installedtargets = testdataFactory.createTargets(10, "assigned", "assigned");
|
||||||
|
|
||||||
// set on installed and assign another one
|
// set on installed and assign another one
|
||||||
assignDistributionSet(installedSet, installedtargets).getActionIds().forEach(actionId -> controllerManagement
|
assignDistributionSet(installedSet, installedtargets).getAssignedEntity().forEach(action -> controllerManagement
|
||||||
.addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Status.FINISHED)));
|
.addUpdateActionStatus(entityFactory.actionStatus().create(action.getId()).status(Status.FINISHED)));
|
||||||
assignDistributionSet(assignedSet, installedtargets);
|
assignDistributionSet(assignedSet, installedtargets);
|
||||||
|
|
||||||
// get final updated version of targets
|
// get final updated version of targets
|
||||||
|
|||||||
@@ -478,7 +478,7 @@ public class TargetManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
final DistributionSetAssignmentResult result = assignDistributionSet(set.getId(), "4711");
|
final DistributionSetAssignmentResult result = assignDistributionSet(set.getId(), "4711");
|
||||||
|
|
||||||
controllerManagement.addUpdateActionStatus(
|
controllerManagement.addUpdateActionStatus(
|
||||||
entityFactory.actionStatus().create(result.getActionIds().get(0)).status(Status.FINISHED));
|
entityFactory.actionStatus().create(getFirstAssignedActionId(result)).status(Status.FINISHED));
|
||||||
assignDistributionSet(set2.getId(), "4711");
|
assignDistributionSet(set2.getId(), "4711");
|
||||||
|
|
||||||
target = targetManagement.getByControllerID("4711").get();
|
target = targetManagement.getByControllerID("4711").get();
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ public class AutoAssignCheckerTest extends AbstractJpaIntegrationTest {
|
|||||||
testdataFactory.createTarget(knownControllerId);
|
testdataFactory.createTarget(knownControllerId);
|
||||||
final DistributionSetAssignmentResult assignmentResult = deploymentManagement.assignDistributionSet(
|
final DistributionSetAssignmentResult assignmentResult = deploymentManagement.assignDistributionSet(
|
||||||
firstDistributionSet.getId(), ActionType.FORCED, 0, Collections.singleton(knownControllerId));
|
firstDistributionSet.getId(), ActionType.FORCED, 0, Collections.singleton(knownControllerId));
|
||||||
final Long manuallyAssignedActionId = assignmentResult.getActionIds().get(0);
|
final Long manuallyAssignedActionId = getFirstAssignedActionId(assignmentResult);
|
||||||
|
|
||||||
// target filter query that matches all targets
|
// target filter query that matches all targets
|
||||||
final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement
|
final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement
|
||||||
|
|||||||
@@ -80,8 +80,8 @@ public class AutoActionCleanupTest extends AbstractJpaIntegrationTest {
|
|||||||
final DistributionSet ds1 = testdataFactory.createDistributionSet("ds1");
|
final DistributionSet ds1 = testdataFactory.createDistributionSet("ds1");
|
||||||
final DistributionSet ds2 = testdataFactory.createDistributionSet("ds2");
|
final DistributionSet ds2 = testdataFactory.createDistributionSet("ds2");
|
||||||
|
|
||||||
final Long action1 = deploymentManagement.assignDistributionSet(ds1.getId(), ActionType.FORCED, 0,
|
final Long action1 = getFirstAssignedActionId(deploymentManagement.assignDistributionSet(ds1.getId(),
|
||||||
Collections.singletonList(trg1.getControllerId())).getActionIds().get(0);
|
ActionType.FORCED, 0, Collections.singletonList(trg1.getControllerId())));
|
||||||
deploymentManagement.assignDistributionSet(ds2.getId(), ActionType.FORCED, 0,
|
deploymentManagement.assignDistributionSet(ds2.getId(), ActionType.FORCED, 0,
|
||||||
Collections.singletonList(trg2.getControllerId()));
|
Collections.singletonList(trg2.getControllerId()));
|
||||||
|
|
||||||
@@ -109,12 +109,12 @@ public class AutoActionCleanupTest extends AbstractJpaIntegrationTest {
|
|||||||
final DistributionSet ds1 = testdataFactory.createDistributionSet("ds1");
|
final DistributionSet ds1 = testdataFactory.createDistributionSet("ds1");
|
||||||
final DistributionSet ds2 = testdataFactory.createDistributionSet("ds2");
|
final DistributionSet ds2 = testdataFactory.createDistributionSet("ds2");
|
||||||
|
|
||||||
final Long action1 = deploymentManagement.assignDistributionSet(ds1.getId(), ActionType.FORCED, 0,
|
final Long action1 = getFirstAssignedActionId(deploymentManagement.assignDistributionSet(ds1.getId(),
|
||||||
Collections.singletonList(trg1.getControllerId())).getActionIds().get(0);
|
ActionType.FORCED, 0, Collections.singletonList(trg1.getControllerId())));
|
||||||
final Long action2 = deploymentManagement.assignDistributionSet(ds2.getId(), ActionType.FORCED, 0,
|
final Long action2 = getFirstAssignedActionId(deploymentManagement.assignDistributionSet(ds2.getId(),
|
||||||
Collections.singletonList(trg2.getControllerId())).getActionIds().get(0);
|
ActionType.FORCED, 0, Collections.singletonList(trg2.getControllerId())));
|
||||||
final Long action3 = deploymentManagement.assignDistributionSet(ds2.getId(), ActionType.FORCED, 0,
|
final Long action3 = getFirstAssignedActionId(deploymentManagement.assignDistributionSet(ds2.getId(),
|
||||||
Collections.singletonList(trg3.getControllerId())).getActionIds().get(0);
|
ActionType.FORCED, 0, Collections.singletonList(trg3.getControllerId())));
|
||||||
|
|
||||||
assertThat(actionRepository.count()).isEqualTo(3);
|
assertThat(actionRepository.count()).isEqualTo(3);
|
||||||
|
|
||||||
@@ -144,12 +144,12 @@ public class AutoActionCleanupTest extends AbstractJpaIntegrationTest {
|
|||||||
final DistributionSet ds1 = testdataFactory.createDistributionSet("ds1");
|
final DistributionSet ds1 = testdataFactory.createDistributionSet("ds1");
|
||||||
final DistributionSet ds2 = testdataFactory.createDistributionSet("ds2");
|
final DistributionSet ds2 = testdataFactory.createDistributionSet("ds2");
|
||||||
|
|
||||||
final Long action1 = deploymentManagement.assignDistributionSet(ds1.getId(), ActionType.FORCED, 0,
|
final Long action1 = getFirstAssignedActionId(deploymentManagement.assignDistributionSet(ds1.getId(),
|
||||||
Collections.singletonList(trg1.getControllerId())).getActionIds().get(0);
|
ActionType.FORCED, 0, Collections.singletonList(trg1.getControllerId())));
|
||||||
final Long action2 = deploymentManagement.assignDistributionSet(ds2.getId(), ActionType.FORCED, 0,
|
final Long action2 = getFirstAssignedActionId(deploymentManagement.assignDistributionSet(ds2.getId(),
|
||||||
Collections.singletonList(trg2.getControllerId())).getActionIds().get(0);
|
ActionType.FORCED, 0, Collections.singletonList(trg2.getControllerId())));
|
||||||
final Long action3 = deploymentManagement.assignDistributionSet(ds2.getId(), ActionType.FORCED, 0,
|
final Long action3 = getFirstAssignedActionId(deploymentManagement.assignDistributionSet(ds2.getId(),
|
||||||
Collections.singletonList(trg3.getControllerId())).getActionIds().get(0);
|
ActionType.FORCED, 0, Collections.singletonList(trg3.getControllerId())));
|
||||||
|
|
||||||
assertThat(actionRepository.count()).isEqualTo(3);
|
assertThat(actionRepository.count()).isEqualTo(3);
|
||||||
|
|
||||||
@@ -181,12 +181,12 @@ public class AutoActionCleanupTest extends AbstractJpaIntegrationTest {
|
|||||||
final DistributionSet ds1 = testdataFactory.createDistributionSet("ds1");
|
final DistributionSet ds1 = testdataFactory.createDistributionSet("ds1");
|
||||||
final DistributionSet ds2 = testdataFactory.createDistributionSet("ds2");
|
final DistributionSet ds2 = testdataFactory.createDistributionSet("ds2");
|
||||||
|
|
||||||
final Long action1 = deploymentManagement.assignDistributionSet(ds1.getId(), ActionType.FORCED, 0,
|
final Long action1 = getFirstAssignedActionId(deploymentManagement.assignDistributionSet(ds1.getId(),
|
||||||
Collections.singletonList(trg1.getControllerId())).getActionIds().get(0);
|
ActionType.FORCED, 0, Collections.singletonList(trg1.getControllerId())));
|
||||||
final Long action2 = deploymentManagement.assignDistributionSet(ds2.getId(), ActionType.FORCED, 0,
|
final Long action2 = getFirstAssignedActionId(deploymentManagement.assignDistributionSet(ds2.getId(),
|
||||||
Collections.singletonList(trg2.getControllerId())).getActionIds().get(0);
|
ActionType.FORCED, 0, Collections.singletonList(trg2.getControllerId())));
|
||||||
final Long action3 = deploymentManagement.assignDistributionSet(ds2.getId(), ActionType.FORCED, 0,
|
final Long action3 = getFirstAssignedActionId(deploymentManagement.assignDistributionSet(ds2.getId(),
|
||||||
Collections.singletonList(trg3.getControllerId())).getActionIds().get(0);
|
ActionType.FORCED, 0, Collections.singletonList(trg3.getControllerId())));
|
||||||
|
|
||||||
assertThat(actionRepository.count()).isEqualTo(3);
|
assertThat(actionRepository.count()).isEqualTo(3);
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import java.net.URI;
|
|||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -321,8 +322,8 @@ public abstract class AbstractIntegrationTest {
|
|||||||
final boolean isRequiredMigrationStep) {
|
final boolean isRequiredMigrationStep) {
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet(distributionSet, isRequiredMigrationStep);
|
final DistributionSet ds = testdataFactory.createDistributionSet(distributionSet, isRequiredMigrationStep);
|
||||||
Target savedTarget = testdataFactory.createTarget(controllerId);
|
Target savedTarget = testdataFactory.createTarget(controllerId);
|
||||||
savedTarget = assignDistributionSet(ds.getId(), savedTarget.getControllerId(), ActionType.FORCED)
|
savedTarget = getFirstAssignedTarget(
|
||||||
.getAssignedEntity().iterator().next();
|
assignDistributionSet(ds.getId(), savedTarget.getControllerId(), ActionType.FORCED));
|
||||||
Action savedAction = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
Action savedAction = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
||||||
.getContent().get(0);
|
.getContent().get(0);
|
||||||
|
|
||||||
@@ -434,4 +435,21 @@ public abstract class AbstractIntegrationTest {
|
|||||||
|
|
||||||
return randomStringBuilder.toString();
|
return randomStringBuilder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static Action getFirstAssignedAction(final DistributionSetAssignmentResult distributionSetAssignmentResult) {
|
||||||
|
return distributionSetAssignmentResult.getAssignedEntity().stream().findFirst()
|
||||||
|
.orElseThrow(() -> new IllegalStateException("expected one assigned action, found none"));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static Long getFirstAssignedActionId(final DistributionSetAssignmentResult distributionSetAssignmentResult) {
|
||||||
|
return getFirstAssignedAction(distributionSetAssignmentResult).getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static Target getFirstAssignedTarget(final DistributionSetAssignmentResult assignment) {
|
||||||
|
return getFirstAssignedAction(assignment).getTarget();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static Comparator<Target> controllerIdComparator() {
|
||||||
|
return (o1, o2) -> o1.getControllerId().equals(o2.getControllerId()) ? 0 : 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,8 +52,8 @@ public class DdiCancelActionTest extends AbstractDDiApiIntegrationTest {
|
|||||||
public void cancelActionCbor() throws Exception {
|
public void cancelActionCbor() throws Exception {
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
||||||
testdataFactory.createTarget();
|
testdataFactory.createTarget();
|
||||||
final Long actionId = assignDistributionSet(ds.getId(), TestdataFactory.DEFAULT_CONTROLLER_ID).getActionIds()
|
final Long actionId = getFirstAssignedActionId(
|
||||||
.get(0);
|
assignDistributionSet(ds.getId(), TestdataFactory.DEFAULT_CONTROLLER_ID));
|
||||||
final Action cancelAction = deploymentManagement.cancelAction(actionId);
|
final Action cancelAction = deploymentManagement.cancelAction(actionId);
|
||||||
|
|
||||||
// check that we can get the cancel action as CBOR
|
// check that we can get the cancel action as CBOR
|
||||||
@@ -80,7 +80,8 @@ public class DdiCancelActionTest extends AbstractDDiApiIntegrationTest {
|
|||||||
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
||||||
final Target savedTarget = testdataFactory.createTarget();
|
final Target savedTarget = testdataFactory.createTarget();
|
||||||
|
|
||||||
final Long actionId = assignDistributionSet(ds.getId(), savedTarget.getControllerId()).getActionIds().get(0);
|
final Long actionId = getFirstAssignedActionId(
|
||||||
|
assignDistributionSet(ds.getId(), savedTarget.getControllerId()));
|
||||||
|
|
||||||
final Action cancelAction = deploymentManagement.cancelAction(actionId);
|
final Action cancelAction = deploymentManagement.cancelAction(actionId);
|
||||||
|
|
||||||
@@ -133,7 +134,8 @@ public class DdiCancelActionTest extends AbstractDDiApiIntegrationTest {
|
|||||||
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
||||||
final Target savedTarget = testdataFactory.createTarget();
|
final Target savedTarget = testdataFactory.createTarget();
|
||||||
|
|
||||||
final Long actionId = assignDistributionSet(ds.getId(), savedTarget.getControllerId()).getActionIds().get(0);
|
final Long actionId = getFirstAssignedActionId(
|
||||||
|
assignDistributionSet(ds.getId(), savedTarget.getControllerId()));
|
||||||
|
|
||||||
long current = System.currentTimeMillis();
|
long current = System.currentTimeMillis();
|
||||||
mvc.perform(get("/{tenant}/controller/v1/{controller}", tenantAware.getCurrentTenant(),
|
mvc.perform(get("/{tenant}/controller/v1/{controller}", tenantAware.getCurrentTenant(),
|
||||||
@@ -249,7 +251,7 @@ public class DdiCancelActionTest extends AbstractDDiApiIntegrationTest {
|
|||||||
final Target savedTarget = testdataFactory.createTarget(targetid);
|
final Target savedTarget = testdataFactory.createTarget(targetid);
|
||||||
final List<Target> toAssign = new ArrayList<>();
|
final List<Target> toAssign = new ArrayList<>();
|
||||||
toAssign.add(savedTarget);
|
toAssign.add(savedTarget);
|
||||||
final Long actionId = assignDistributionSet(ds, toAssign).getActionIds().get(0);
|
final Long actionId = getFirstAssignedActionId(assignDistributionSet(ds, toAssign));
|
||||||
|
|
||||||
return deploymentManagement.cancelAction(actionId);
|
return deploymentManagement.cancelAction(actionId);
|
||||||
}
|
}
|
||||||
@@ -262,8 +264,8 @@ public class DdiCancelActionTest extends AbstractDDiApiIntegrationTest {
|
|||||||
|
|
||||||
final Target savedTarget = testdataFactory.createTarget();
|
final Target savedTarget = testdataFactory.createTarget();
|
||||||
|
|
||||||
final Long actionId = assignDistributionSet(ds.getId(), TestdataFactory.DEFAULT_CONTROLLER_ID).getActionIds()
|
final Long actionId = getFirstAssignedActionId(
|
||||||
.get(0);
|
assignDistributionSet(ds.getId(), TestdataFactory.DEFAULT_CONTROLLER_ID));
|
||||||
|
|
||||||
// cancel action manually
|
// cancel action manually
|
||||||
final Action cancelAction = deploymentManagement.cancelAction(actionId);
|
final Action cancelAction = deploymentManagement.cancelAction(actionId);
|
||||||
@@ -337,12 +339,12 @@ public class DdiCancelActionTest extends AbstractDDiApiIntegrationTest {
|
|||||||
|
|
||||||
final Target savedTarget = testdataFactory.createTarget();
|
final Target savedTarget = testdataFactory.createTarget();
|
||||||
|
|
||||||
final Long actionId = assignDistributionSet(ds.getId(), TestdataFactory.DEFAULT_CONTROLLER_ID).getActionIds()
|
final Long actionId = getFirstAssignedActionId(
|
||||||
.get(0);
|
assignDistributionSet(ds.getId(), TestdataFactory.DEFAULT_CONTROLLER_ID));
|
||||||
final Long actionId2 = assignDistributionSet(ds2.getId(), TestdataFactory.DEFAULT_CONTROLLER_ID).getActionIds()
|
final Long actionId2 = getFirstAssignedActionId(
|
||||||
.get(0);
|
assignDistributionSet(ds2.getId(), TestdataFactory.DEFAULT_CONTROLLER_ID));
|
||||||
final Long actionId3 = assignDistributionSet(ds3.getId(), TestdataFactory.DEFAULT_CONTROLLER_ID).getActionIds()
|
final Long actionId3 = getFirstAssignedActionId(
|
||||||
.get(0);
|
assignDistributionSet(ds3.getId(), TestdataFactory.DEFAULT_CONTROLLER_ID));
|
||||||
|
|
||||||
assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(3);
|
assertThat(deploymentManagement.countActionStatusAll()).isEqualTo(3);
|
||||||
|
|
||||||
@@ -451,8 +453,8 @@ public class DdiCancelActionTest extends AbstractDDiApiIntegrationTest {
|
|||||||
testdataFactory.createTarget();
|
testdataFactory.createTarget();
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
||||||
|
|
||||||
final Long actionId = assignDistributionSet(ds.getId(), TestdataFactory.DEFAULT_CONTROLLER_ID).getActionIds()
|
final Long actionId = getFirstAssignedActionId(
|
||||||
.get(0);
|
assignDistributionSet(ds.getId(), TestdataFactory.DEFAULT_CONTROLLER_ID));
|
||||||
|
|
||||||
final Action cancelAction = deploymentManagement.cancelAction(actionId);
|
final Action cancelAction = deploymentManagement.cancelAction(actionId);
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.apache.commons.lang3.RandomUtils;
|
import org.apache.commons.lang3.RandomUtils;
|
||||||
import org.assertj.core.api.Condition;
|
import org.assertj.core.api.Condition;
|
||||||
@@ -156,7 +157,7 @@ public class DdiDeploymentBaseTest extends AbstractDDiApiIntegrationTest {
|
|||||||
final List<Target> targetsAssignedToDs = deploymentManagement
|
final List<Target> targetsAssignedToDs = deploymentManagement
|
||||||
.assignDistributionSet(ds.getId(), ActionType.FORCED, RepositoryModelConstants.NO_FORCE_TIME,
|
.assignDistributionSet(ds.getId(), ActionType.FORCED, RepositoryModelConstants.NO_FORCE_TIME,
|
||||||
Collections.singletonList(savedTarget.getControllerId()))
|
Collections.singletonList(savedTarget.getControllerId()))
|
||||||
.getAssignedEntity();
|
.getAssignedEntity().stream().map(Action::getTarget).collect(Collectors.toList());;
|
||||||
assertThat(deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())).hasSize(1);
|
assertThat(deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())).hasSize(1);
|
||||||
|
|
||||||
final Action action = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
final Action action = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
||||||
@@ -207,9 +208,9 @@ public class DdiDeploymentBaseTest extends AbstractDDiApiIntegrationTest {
|
|||||||
final Target target = testdataFactory.createTarget(DEFAULT_CONTROLLER_ID);
|
final Target target = testdataFactory.createTarget(DEFAULT_CONTROLLER_ID);
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet("", true);
|
final DistributionSet ds = testdataFactory.createDistributionSet("", true);
|
||||||
|
|
||||||
final Long actionId = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.TIMEFORCED,
|
final Long actionId = getFirstAssignedActionId(
|
||||||
System.currentTimeMillis() + 2_000, Collections.singletonList(target.getControllerId())).getActionIds()
|
deploymentManagement.assignDistributionSet(ds.getId(), ActionType.TIMEFORCED,
|
||||||
.get(0);
|
System.currentTimeMillis() + 2_000, Collections.singletonList(target.getControllerId())));
|
||||||
|
|
||||||
MvcResult mvcResult = performGet("/{tenant}/controller/v1/" + DEFAULT_CONTROLLER_ID, MediaTypes.HAL_JSON,
|
MvcResult mvcResult = performGet("/{tenant}/controller/v1/" + DEFAULT_CONTROLLER_ID, MediaTypes.HAL_JSON,
|
||||||
status().isOk(), tenantAware.getCurrentTenant()).andReturn();
|
status().isOk(), tenantAware.getCurrentTenant()).andReturn();
|
||||||
@@ -258,7 +259,7 @@ public class DdiDeploymentBaseTest extends AbstractDDiApiIntegrationTest {
|
|||||||
|
|
||||||
final List<Target> saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.SOFT,
|
final List<Target> saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.SOFT,
|
||||||
RepositoryModelConstants.NO_FORCE_TIME, Collections.singletonList(savedTarget.getControllerId()))
|
RepositoryModelConstants.NO_FORCE_TIME, Collections.singletonList(savedTarget.getControllerId()))
|
||||||
.getAssignedEntity();
|
.getAssignedEntity().stream().map(Action::getTarget).collect(Collectors.toList());
|
||||||
assertThat(deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())).hasSize(1);
|
assertThat(deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())).hasSize(1);
|
||||||
|
|
||||||
final Action action = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
final Action action = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
||||||
@@ -318,7 +319,7 @@ public class DdiDeploymentBaseTest extends AbstractDDiApiIntegrationTest {
|
|||||||
|
|
||||||
final List<Target> saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.TIMEFORCED,
|
final List<Target> saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.TIMEFORCED,
|
||||||
System.currentTimeMillis(), Collections.singletonList(savedTarget.getControllerId()))
|
System.currentTimeMillis(), Collections.singletonList(savedTarget.getControllerId()))
|
||||||
.getAssignedEntity();
|
.getAssignedEntity().stream().map(Action::getTarget).collect(Collectors.toList());
|
||||||
assertThat(deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())).hasSize(1);
|
assertThat(deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())).hasSize(1);
|
||||||
|
|
||||||
final Action action = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
final Action action = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
||||||
@@ -386,7 +387,7 @@ public class DdiDeploymentBaseTest extends AbstractDDiApiIntegrationTest {
|
|||||||
|
|
||||||
final List<Target> saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.DOWNLOAD_ONLY,
|
final List<Target> saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.DOWNLOAD_ONLY,
|
||||||
RepositoryModelConstants.NO_FORCE_TIME, Collections.singletonList(savedTarget.getControllerId()))
|
RepositoryModelConstants.NO_FORCE_TIME, Collections.singletonList(savedTarget.getControllerId()))
|
||||||
.getAssignedEntity();
|
.getAssignedEntity().stream().map(Action::getTarget).collect(Collectors.toList());
|
||||||
assertThat(deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())).hasSize(1);
|
assertThat(deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())).hasSize(1);
|
||||||
|
|
||||||
final Action action = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
final Action action = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
||||||
@@ -528,7 +529,7 @@ public class DdiDeploymentBaseTest extends AbstractDDiApiIntegrationTest {
|
|||||||
final List<Target> toAssign = Collections.singletonList(target);
|
final List<Target> toAssign = Collections.singletonList(target);
|
||||||
final DistributionSet savedSet = testdataFactory.createDistributionSet("");
|
final DistributionSet savedSet = testdataFactory.createDistributionSet("");
|
||||||
|
|
||||||
final Long actionId = assignDistributionSet(savedSet, toAssign).getActionIds().get(0);
|
final Long actionId = getFirstAssignedActionId(assignDistributionSet(savedSet, toAssign));
|
||||||
mvc.perform(MockMvcRequestBuilders.get(DEPLOYMENT_BASE + actionId, tenantAware.getCurrentTenant(),
|
mvc.perform(MockMvcRequestBuilders.get(DEPLOYMENT_BASE + actionId, tenantAware.getCurrentTenant(),
|
||||||
DEFAULT_CONTROLLER_ID)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
DEFAULT_CONTROLLER_ID)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
||||||
mvc.perform(MockMvcRequestBuilders
|
mvc.perform(MockMvcRequestBuilders
|
||||||
@@ -591,9 +592,9 @@ public class DdiDeploymentBaseTest extends AbstractDDiApiIntegrationTest {
|
|||||||
final DistributionSet ds2 = testdataFactory.createDistributionSet("2", true);
|
final DistributionSet ds2 = testdataFactory.createDistributionSet("2", true);
|
||||||
final DistributionSet ds3 = testdataFactory.createDistributionSet("3", true);
|
final DistributionSet ds3 = testdataFactory.createDistributionSet("3", true);
|
||||||
|
|
||||||
final Long actionId1 = assignDistributionSet(ds1.getId(), DEFAULT_CONTROLLER_ID).getActionIds().get(0);
|
final Long actionId1 = getFirstAssignedActionId(assignDistributionSet(ds1.getId(), DEFAULT_CONTROLLER_ID));
|
||||||
final Long actionId2 = assignDistributionSet(ds2.getId(), DEFAULT_CONTROLLER_ID).getActionIds().get(0);
|
final Long actionId2 = getFirstAssignedActionId(assignDistributionSet(ds2.getId(), DEFAULT_CONTROLLER_ID));
|
||||||
final Long actionId3 = assignDistributionSet(ds3.getId(), DEFAULT_CONTROLLER_ID).getActionIds().get(0);
|
final Long actionId3 = getFirstAssignedActionId(assignDistributionSet(ds3.getId(), DEFAULT_CONTROLLER_ID));
|
||||||
|
|
||||||
findTargetAndAssertUpdateStatus(Optional.of(ds3), TargetUpdateStatus.PENDING, 3, Optional.empty());
|
findTargetAndAssertUpdateStatus(Optional.of(ds3), TargetUpdateStatus.PENDING, 3, Optional.empty());
|
||||||
assertThat(targetManagement.findByUpdateStatus(PageRequest.of(0, 10), TargetUpdateStatus.UNKNOWN)).hasSize(2);
|
assertThat(targetManagement.findByUpdateStatus(PageRequest.of(0, 10), TargetUpdateStatus.UNKNOWN)).hasSize(2);
|
||||||
@@ -663,39 +664,39 @@ public class DdiDeploymentBaseTest extends AbstractDDiApiIntegrationTest {
|
|||||||
@Description("Verifies that the controller can provided as much feedback entries as necessary as long as it is in the configured limits.")
|
@Description("Verifies that the controller can provided as much feedback entries as necessary as long as it is in the configured limits.")
|
||||||
public void rootRsSingleDeploymentActionFeedback() throws Exception {
|
public void rootRsSingleDeploymentActionFeedback() throws Exception {
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
||||||
final Action action = assignDistributionSet(ds,
|
final Long actionId = getFirstAssignedActionId(assignDistributionSet(ds,
|
||||||
Collections.singletonList(testdataFactory.createTarget(DEFAULT_CONTROLLER_ID))).getActions().get(0);
|
Collections.singletonList(testdataFactory.createTarget(DEFAULT_CONTROLLER_ID))));
|
||||||
findTargetAndAssertUpdateStatus(Optional.of(ds), TargetUpdateStatus.PENDING, 1, Optional.empty());
|
findTargetAndAssertUpdateStatus(Optional.of(ds), TargetUpdateStatus.PENDING, 1, Optional.empty());
|
||||||
|
|
||||||
// Now valid Feedback
|
// Now valid Feedback
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
postFeedback(MediaType.APPLICATION_JSON, DEFAULT_CONTROLLER_ID, action.getId(),
|
postFeedback(MediaType.APPLICATION_JSON, DEFAULT_CONTROLLER_ID, actionId,
|
||||||
JsonBuilder.deploymentActionFeedback(action.getId().toString(), "proceeding"), status().isOk());
|
JsonBuilder.deploymentActionFeedback(actionId.toString(), "proceeding"), status().isOk());
|
||||||
assertActionStatusCount(i + 2, i);
|
assertActionStatusCount(i + 2, i);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
postFeedback(MediaType.APPLICATION_JSON, DEFAULT_CONTROLLER_ID, action.getId(),
|
postFeedback(MediaType.APPLICATION_JSON, DEFAULT_CONTROLLER_ID, actionId,
|
||||||
JsonBuilder.deploymentActionFeedback(action.getId().toString(), "scheduled"), status().isOk());
|
JsonBuilder.deploymentActionFeedback(actionId.toString(), "scheduled"), status().isOk());
|
||||||
assertActionStatusCount(6, 5);
|
assertActionStatusCount(6, 5);
|
||||||
|
|
||||||
postFeedback(MediaType.APPLICATION_JSON, DEFAULT_CONTROLLER_ID, action.getId(),
|
postFeedback(MediaType.APPLICATION_JSON, DEFAULT_CONTROLLER_ID, actionId,
|
||||||
JsonBuilder.deploymentActionFeedback(action.getId().toString(), "resumed"), status().isOk());
|
JsonBuilder.deploymentActionFeedback(actionId.toString(), "resumed"), status().isOk());
|
||||||
assertActionStatusCount(7, 6);
|
assertActionStatusCount(7, 6);
|
||||||
|
|
||||||
postFeedback(MediaType.APPLICATION_JSON, DEFAULT_CONTROLLER_ID, action.getId(),
|
postFeedback(MediaType.APPLICATION_JSON, DEFAULT_CONTROLLER_ID, actionId,
|
||||||
JsonBuilder.deploymentActionFeedback(action.getId().toString(), "canceled"), status().isOk());
|
JsonBuilder.deploymentActionFeedback(actionId.toString(), "canceled"), status().isOk());
|
||||||
assertStatusAndActiveActionsCount(TargetUpdateStatus.PENDING, 1);
|
assertStatusAndActiveActionsCount(TargetUpdateStatus.PENDING, 1);
|
||||||
assertActionStatusCount(8, 7, 0, 0, 1);
|
assertActionStatusCount(8, 7, 0, 0, 1);
|
||||||
assertTargetCountByStatus(1, 0, 0);
|
assertTargetCountByStatus(1, 0, 0);
|
||||||
|
|
||||||
postFeedback(MediaType.APPLICATION_JSON, DEFAULT_CONTROLLER_ID, action.getId(),
|
postFeedback(MediaType.APPLICATION_JSON, DEFAULT_CONTROLLER_ID, actionId,
|
||||||
JsonBuilder.deploymentActionFeedback(action.getId().toString(), "rejected"), status().isOk());
|
JsonBuilder.deploymentActionFeedback(actionId.toString(), "rejected"), status().isOk());
|
||||||
assertStatusAndActiveActionsCount(TargetUpdateStatus.PENDING, 1);
|
assertStatusAndActiveActionsCount(TargetUpdateStatus.PENDING, 1);
|
||||||
assertActionStatusCount(9, 6, 1, 0, 1);
|
assertActionStatusCount(9, 6, 1, 0, 1);
|
||||||
|
|
||||||
postFeedback(MediaType.APPLICATION_JSON, DEFAULT_CONTROLLER_ID, action.getId(),
|
postFeedback(MediaType.APPLICATION_JSON, DEFAULT_CONTROLLER_ID, actionId,
|
||||||
JsonBuilder.deploymentActionFeedback(action.getId().toString(), "closed"), status().isOk());
|
JsonBuilder.deploymentActionFeedback(actionId.toString(), "closed"), status().isOk());
|
||||||
assertStatusAndActiveActionsCount(TargetUpdateStatus.IN_SYNC, 0);
|
assertStatusAndActiveActionsCount(TargetUpdateStatus.IN_SYNC, 0);
|
||||||
assertActionStatusCount(10, 7, 1, 1, 1);
|
assertActionStatusCount(10, 7, 1, 1, 1);
|
||||||
assertTargetCountByStatus(0, 0, 1);
|
assertTargetCountByStatus(0, 0, 1);
|
||||||
|
|||||||
@@ -369,8 +369,7 @@ public class DdiRootControllerTest extends AbstractDDiApiIntegrationTest {
|
|||||||
public void tryToFinishAnUpdateProcessAfterItHasBeenFinished() throws Exception {
|
public void tryToFinishAnUpdateProcessAfterItHasBeenFinished() throws Exception {
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
||||||
Target savedTarget = testdataFactory.createTarget("911");
|
Target savedTarget = testdataFactory.createTarget("911");
|
||||||
savedTarget = assignDistributionSet(ds.getId(), savedTarget.getControllerId()).getAssignedEntity().iterator()
|
savedTarget = getFirstAssignedTarget(assignDistributionSet(ds.getId(), savedTarget.getControllerId()));
|
||||||
.next();
|
|
||||||
final Action savedAction = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
final Action savedAction = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
||||||
.getContent().get(0);
|
.getContent().get(0);
|
||||||
sendDeploymentActionFeedback(savedTarget, savedAction, "proceeding", null).andDo(MockMvcResultPrinter.print())
|
sendDeploymentActionFeedback(savedTarget, savedAction, "proceeding", null).andDo(MockMvcResultPrinter.print())
|
||||||
@@ -413,7 +412,7 @@ public class DdiRootControllerTest extends AbstractDDiApiIntegrationTest {
|
|||||||
@Step
|
@Step
|
||||||
private void assertAttributesUpdateNotRequestedAfterFailedDeployment(Target target, final DistributionSet ds)
|
private void assertAttributesUpdateNotRequestedAfterFailedDeployment(Target target, final DistributionSet ds)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
target = assignDistributionSet(ds.getId(), target.getControllerId()).getAssignedEntity().iterator().next();
|
target = getFirstAssignedTarget(assignDistributionSet(ds.getId(), target.getControllerId()));
|
||||||
final Action action = deploymentManagement.findActiveActionsByTarget(PAGE, target.getControllerId())
|
final Action action = deploymentManagement.findActiveActionsByTarget(PAGE, target.getControllerId())
|
||||||
.getContent().get(0);
|
.getContent().get(0);
|
||||||
sendDeploymentActionFeedback(target, action, "closed", "failure").andExpect(status().isOk());
|
sendDeploymentActionFeedback(target, action, "closed", "failure").andExpect(status().isOk());
|
||||||
@@ -423,7 +422,7 @@ public class DdiRootControllerTest extends AbstractDDiApiIntegrationTest {
|
|||||||
@Step
|
@Step
|
||||||
private void assertAttributesUpdateRequestedAfterSuccessfulDeployment(Target target, final DistributionSet ds)
|
private void assertAttributesUpdateRequestedAfterSuccessfulDeployment(Target target, final DistributionSet ds)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
target = assignDistributionSet(ds.getId(), target.getControllerId()).getAssignedEntity().iterator().next();
|
target = getFirstAssignedTarget(assignDistributionSet(ds.getId(), target.getControllerId()));
|
||||||
final Action action = deploymentManagement.findActiveActionsByTarget(PAGE, target.getControllerId())
|
final Action action = deploymentManagement.findActiveActionsByTarget(PAGE, target.getControllerId())
|
||||||
.getContent().get(0);
|
.getContent().get(0);
|
||||||
sendDeploymentActionFeedback(target, action, "closed", null).andExpect(status().isOk());
|
sendDeploymentActionFeedback(target, action, "closed", null).andExpect(status().isOk());
|
||||||
@@ -474,8 +473,7 @@ public class DdiRootControllerTest extends AbstractDDiApiIntegrationTest {
|
|||||||
public void testActionHistoryCount() throws Exception {
|
public void testActionHistoryCount() throws Exception {
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
||||||
Target savedTarget = testdataFactory.createTarget("911");
|
Target savedTarget = testdataFactory.createTarget("911");
|
||||||
savedTarget = assignDistributionSet(ds.getId(), savedTarget.getControllerId()).getAssignedEntity().iterator()
|
savedTarget = getFirstAssignedTarget(assignDistributionSet(ds.getId(), savedTarget.getControllerId()));
|
||||||
.next();
|
|
||||||
final Action savedAction = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
final Action savedAction = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
||||||
.getContent().get(0);
|
.getContent().get(0);
|
||||||
|
|
||||||
@@ -510,8 +508,7 @@ public class DdiRootControllerTest extends AbstractDDiApiIntegrationTest {
|
|||||||
public void testActionHistoryZeroInput() throws Exception {
|
public void testActionHistoryZeroInput() throws Exception {
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
||||||
Target savedTarget = testdataFactory.createTarget("911");
|
Target savedTarget = testdataFactory.createTarget("911");
|
||||||
savedTarget = assignDistributionSet(ds.getId(), savedTarget.getControllerId()).getAssignedEntity().iterator()
|
savedTarget = getFirstAssignedTarget(assignDistributionSet(ds.getId(), savedTarget.getControllerId()));
|
||||||
.next();
|
|
||||||
final Action savedAction = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
final Action savedAction = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
||||||
.getContent().get(0);
|
.getContent().get(0);
|
||||||
|
|
||||||
@@ -542,8 +539,7 @@ public class DdiRootControllerTest extends AbstractDDiApiIntegrationTest {
|
|||||||
public void testActionHistoryNegativeInput() throws Exception {
|
public void testActionHistoryNegativeInput() throws Exception {
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
||||||
Target savedTarget = testdataFactory.createTarget("911");
|
Target savedTarget = testdataFactory.createTarget("911");
|
||||||
savedTarget = assignDistributionSet(ds.getId(), savedTarget.getControllerId()).getAssignedEntity().iterator()
|
savedTarget = getFirstAssignedTarget(assignDistributionSet(ds.getId(), savedTarget.getControllerId()));
|
||||||
.next();
|
|
||||||
final Action savedAction = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
final Action savedAction = deploymentManagement.findActiveActionsByTarget(PAGE, savedTarget.getControllerId())
|
||||||
.getContent().get(0);
|
.getContent().get(0);
|
||||||
|
|
||||||
@@ -620,8 +616,8 @@ public class DdiRootControllerTest extends AbstractDDiApiIntegrationTest {
|
|||||||
public void downloadAndUpdateStatusBeforeMaintenanceWindowStartTime() throws Exception {
|
public void downloadAndUpdateStatusBeforeMaintenanceWindowStartTime() throws Exception {
|
||||||
Target savedTarget = testdataFactory.createTarget("1911");
|
Target savedTarget = testdataFactory.createTarget("1911");
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
||||||
savedTarget = assignDistributionSetWithMaintenanceWindow(ds.getId(), savedTarget.getControllerId(),
|
savedTarget = getFirstAssignedTarget(assignDistributionSetWithMaintenanceWindow(ds.getId(),
|
||||||
getTestSchedule(2), getTestDuration(1), getTestTimeZone()).getAssignedEntity().iterator().next();
|
savedTarget.getControllerId(), getTestSchedule(2), getTestDuration(1), getTestTimeZone()));
|
||||||
|
|
||||||
mvc.perform(get("/default-tenant/controller/v1/1911/")).andExpect(status().isOk());
|
mvc.perform(get("/default-tenant/controller/v1/1911/")).andExpect(status().isOk());
|
||||||
|
|
||||||
@@ -640,8 +636,8 @@ public class DdiRootControllerTest extends AbstractDDiApiIntegrationTest {
|
|||||||
public void downloadAndUpdateStatusDuringMaintenanceWindow() throws Exception {
|
public void downloadAndUpdateStatusDuringMaintenanceWindow() throws Exception {
|
||||||
Target savedTarget = testdataFactory.createTarget("1911");
|
Target savedTarget = testdataFactory.createTarget("1911");
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
final DistributionSet ds = testdataFactory.createDistributionSet("");
|
||||||
savedTarget = assignDistributionSetWithMaintenanceWindow(ds.getId(), savedTarget.getControllerId(),
|
savedTarget = getFirstAssignedTarget(assignDistributionSetWithMaintenanceWindow(ds.getId(),
|
||||||
getTestSchedule(-5), getTestDuration(10), getTestTimeZone()).getAssignedEntity().iterator().next();
|
savedTarget.getControllerId(), getTestSchedule(-5), getTestDuration(10), getTestTimeZone()));
|
||||||
|
|
||||||
mvc.perform(get("/default-tenant/controller/v1/1911/")).andExpect(status().isOk());
|
mvc.perform(get("/default-tenant/controller/v1/1911/")).andExpect(status().isOk());
|
||||||
|
|
||||||
@@ -662,12 +658,12 @@ public class DdiRootControllerTest extends AbstractDDiApiIntegrationTest {
|
|||||||
final Target target = testdataFactory.createTarget();
|
final Target target = testdataFactory.createTarget();
|
||||||
final DistributionSet ds1 = testdataFactory.createDistributionSet(UUID.randomUUID().toString());
|
final DistributionSet ds1 = testdataFactory.createDistributionSet(UUID.randomUUID().toString());
|
||||||
final DistributionSet ds2 = testdataFactory.createDistributionSet(UUID.randomUUID().toString());
|
final DistributionSet ds2 = testdataFactory.createDistributionSet(UUID.randomUUID().toString());
|
||||||
final Action action1 = assignDistributionSet(ds1, target).getActions().get(0);
|
final Action action1 = getFirstAssignedAction(assignDistributionSet(ds1, target));
|
||||||
final Action action2 = assignDistributionSet(ds2, target).getActions().get(0);
|
final Long action2Id = getFirstAssignedActionId(assignDistributionSet(ds2, target));
|
||||||
|
|
||||||
assertDeploymentActionIsExposedToTarget(target.getControllerId(), action1.getId());
|
assertDeploymentActionIsExposedToTarget(target.getControllerId(), action1.getId());
|
||||||
sendDeploymentActionFeedback(target, action1, "closed", "success");
|
sendDeploymentActionFeedback(target, action1, "closed", "success");
|
||||||
assertDeploymentActionIsExposedToTarget(target.getControllerId(), action2.getId());
|
assertDeploymentActionIsExposedToTarget(target.getControllerId(), action2Id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
|
|||||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.hawkbit.repository.model.Action;
|
import org.eclipse.hawkbit.repository.model.Action;
|
||||||
@@ -156,9 +156,9 @@ public class DosFilterTest extends AbstractDDiApiIntegrationTest {
|
|||||||
private Long prepareDeploymentBase() {
|
private Long prepareDeploymentBase() {
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet("test");
|
final DistributionSet ds = testdataFactory.createDistributionSet("test");
|
||||||
final Target target = testdataFactory.createTarget("4711");
|
final Target target = testdataFactory.createTarget("4711");
|
||||||
final List<Target> toAssign = Arrays.asList(target);
|
final List<Target> toAssign = Collections.singletonList(target);
|
||||||
|
|
||||||
final Iterable<Target> saved = assignDistributionSet(ds, toAssign).getAssignedEntity();
|
assignDistributionSet(ds, toAssign);
|
||||||
assertThat(deploymentManagement.findActiveActionsByTarget(PAGE, target.getControllerId())).hasSize(1);
|
assertThat(deploymentManagement.findActiveActionsByTarget(PAGE, target.getControllerId())).hasSize(1);
|
||||||
|
|
||||||
final Action uaction = deploymentManagement.findActiveActionsByTarget(PAGE, target.getControllerId())
|
final Action uaction = deploymentManagement.findActiveActionsByTarget(PAGE, target.getControllerId())
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2019 Bosch Software Innovations GmbH and others.
|
||||||
|
*
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*/
|
||||||
|
package org.eclipse.hawkbit.mgmt.json.model.distributionset;
|
||||||
|
|
||||||
|
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
|
||||||
|
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
|
||||||
|
|
||||||
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetRestApi;
|
||||||
|
import org.springframework.hateoas.ResourceSupport;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Representation of an Action Id as a Json Object with link to the Action resource
|
||||||
|
*/
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
public class MgmtActionId extends ResourceSupport {
|
||||||
|
|
||||||
|
private long actionId;
|
||||||
|
|
||||||
|
public MgmtActionId() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param actionId
|
||||||
|
* the actionId
|
||||||
|
* @param controllerId
|
||||||
|
* the controller Id
|
||||||
|
*/
|
||||||
|
public MgmtActionId(final String controllerId, final long actionId) {
|
||||||
|
this.actionId = actionId;
|
||||||
|
add(linkTo(methodOn(MgmtTargetRestApi.class).getAction(controllerId, actionId)).withSelfRel());
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonProperty("id")
|
||||||
|
public long getActionId() {
|
||||||
|
return actionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setActionId(final long actionId) {
|
||||||
|
this.actionId = actionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(final Object obj) {
|
||||||
|
return super.equals(obj) && this.getClass().isInstance(obj) && actionId == ((MgmtActionId) obj).getActionId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(super.hashCode(), actionId);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,9 +8,14 @@
|
|||||||
*/
|
*/
|
||||||
package org.eclipse.hawkbit.mgmt.json.model.distributionset;
|
package org.eclipse.hawkbit.mgmt.json.model.distributionset;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude.Include;
|
import com.fasterxml.jackson.annotation.JsonInclude.Include;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import org.springframework.hateoas.ResourceSupport;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Response Body of Target for assignment operations.
|
* Response Body of Target for assignment operations.
|
||||||
@@ -20,25 +25,17 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include;
|
|||||||
*/
|
*/
|
||||||
@JsonInclude(Include.NON_NULL)
|
@JsonInclude(Include.NON_NULL)
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
public class MgmtTargetAssignmentResponseBody {
|
public class MgmtTargetAssignmentResponseBody extends ResourceSupport {
|
||||||
|
|
||||||
private int assigned;
|
|
||||||
private int alreadyAssigned;
|
private int alreadyAssigned;
|
||||||
private int total;
|
private List<MgmtActionId> assignedActions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the assigned
|
* @return the count of assigned targets
|
||||||
*/
|
*/
|
||||||
|
@JsonProperty("assigned")
|
||||||
public int getAssigned() {
|
public int getAssigned() {
|
||||||
return assigned;
|
return assignedActions == null ? 0 : assignedActions.size();
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param assigned
|
|
||||||
* the assigned to set
|
|
||||||
*/
|
|
||||||
public void setAssigned(final int assigned) {
|
|
||||||
this.assigned = assigned;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -59,15 +56,35 @@ public class MgmtTargetAssignmentResponseBody {
|
|||||||
/**
|
/**
|
||||||
* @return the total
|
* @return the total
|
||||||
*/
|
*/
|
||||||
|
@JsonProperty("total")
|
||||||
public int getTotal() {
|
public int getTotal() {
|
||||||
return total;
|
return getAssigned() + alreadyAssigned;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param total
|
* @return the assignedActions
|
||||||
* the total to set
|
|
||||||
*/
|
*/
|
||||||
public void setTotal(final int total) {
|
public List<MgmtActionId> getAssignedActions() {
|
||||||
this.total = total;
|
return assignedActions;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param assignedActions
|
||||||
|
* the assigned actions to set
|
||||||
|
*/
|
||||||
|
public void setAssignedActions(final List<MgmtActionId> assignedActions) {
|
||||||
|
this.assignedActions = assignedActions;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(final Object obj) {
|
||||||
|
return super.equals(obj) && this.getClass().isInstance(obj)
|
||||||
|
&& ((MgmtTargetAssignmentResponseBody) obj).getAlreadyAssigned() == alreadyAssigned
|
||||||
|
&& Objects.equals(((MgmtTargetAssignmentResponseBody) obj).getAssignedActions(), assignedActions);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(super.hashCode(), alreadyAssigned, assignedActions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2019 Bosch Software Innovations GmbH and others.
|
||||||
|
*
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*/
|
||||||
|
package org.eclipse.hawkbit.mgmt.json.model.distributionset;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import io.qameta.allure.Story;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.springframework.context.annotation.Description;
|
||||||
|
|
||||||
|
@Story("Retrieve all open action ids")
|
||||||
|
@Description("Tests for the MgmtTargetAssignmentResponseBody")
|
||||||
|
public class MgmtTargetAssignmentResponseBodyTest {
|
||||||
|
|
||||||
|
private static final List<Long> ASSIGNED_ACTIONS = Arrays.asList(4L, 5L, 6L);
|
||||||
|
private static final int ALREADY_ASSIGNED_COUNT = 3;
|
||||||
|
private static final String CONTROLLER_ID = "target";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Description("Tests that the ActionIds are serialized correctly in MgmtTargetAssignmentResponseBody")
|
||||||
|
public void testActionIdsSerialization() throws IOException {
|
||||||
|
final MgmtTargetAssignmentResponseBody responseBody = generateResponseBody();
|
||||||
|
final ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
final String responseBodyAsString = objectMapper.writeValueAsString(responseBody);
|
||||||
|
final JsonNode jsonNode = objectMapper.readTree(responseBodyAsString);
|
||||||
|
|
||||||
|
assertThat(jsonNode.has("assigned")).as("the assigned targets count").isTrue();
|
||||||
|
assertThat(jsonNode.get("assigned").isNumber()).as("the assigned targets count").isTrue();
|
||||||
|
assertThat(jsonNode.get("assigned").asLong()).as("the assigned targets count")
|
||||||
|
.isEqualTo(ASSIGNED_ACTIONS.size());
|
||||||
|
|
||||||
|
assertThat(jsonNode.has("alreadyAssigned")).as("the already assigned targets count").isTrue();
|
||||||
|
assertThat(jsonNode.get("alreadyAssigned").isNumber()).as("the already assigned targets count").isTrue();
|
||||||
|
assertThat(jsonNode.get("alreadyAssigned").asLong()).as("the already assigned targets count")
|
||||||
|
.isEqualTo(ALREADY_ASSIGNED_COUNT);
|
||||||
|
|
||||||
|
assertThat(jsonNode.has("total")).as("the total targets count").isTrue();
|
||||||
|
assertThat(jsonNode.get("total").isNumber()).as("the total targets count").isTrue();
|
||||||
|
assertThat(jsonNode.get("total").asLong()).as("the total targets count")
|
||||||
|
.isEqualTo(ALREADY_ASSIGNED_COUNT + ASSIGNED_ACTIONS.size());
|
||||||
|
|
||||||
|
assertThat(jsonNode.has("assignedActions")).as("The created actions in result of this assignment").isTrue();
|
||||||
|
assertThat(jsonNode.get("assignedActions").isArray()).as("The created actions in result of this assignment")
|
||||||
|
.isTrue();
|
||||||
|
assertThat(jsonNode.get("assignedActions").size()).as("The created actions in result of this assignment")
|
||||||
|
.isEqualTo(3);
|
||||||
|
|
||||||
|
assertThat(jsonNode.get("assignedActions").get(0).isObject())
|
||||||
|
.as("A created action in result of this assignment").isTrue();
|
||||||
|
assertThat(jsonNode.get("assignedActions").get(0).has("id")).as("A created action in result of this assignment")
|
||||||
|
.isTrue();
|
||||||
|
assertThat(jsonNode.get("assignedActions").get(0).get("id").isNumber())
|
||||||
|
.as("A created action in result of this assignment").isTrue();
|
||||||
|
assertThat(ASSIGNED_ACTIONS).as("The expected action ids")
|
||||||
|
.contains(jsonNode.get("assignedActions").get(0).get("id").asLong());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static MgmtTargetAssignmentResponseBody generateResponseBody() {
|
||||||
|
MgmtTargetAssignmentResponseBody response = new MgmtTargetAssignmentResponseBody();
|
||||||
|
response.setAssignedActions(
|
||||||
|
ASSIGNED_ACTIONS.stream().map(id -> new MgmtActionId(CONTROLLER_ID, id)).collect(Collectors.toList()));
|
||||||
|
response.setAlreadyAssigned(ALREADY_ASSIGNED_COUNT);
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,6 +18,7 @@ import java.util.List;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.MgmtMetadata;
|
import org.eclipse.hawkbit.mgmt.json.model.MgmtMetadata;
|
||||||
|
import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtActionId;
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet;
|
import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet;
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSetRequestBodyPost;
|
import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSetRequestBodyPost;
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtTargetAssignmentResponseBody;
|
import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtTargetAssignmentResponseBody;
|
||||||
@@ -137,9 +138,9 @@ public final class MgmtDistributionSetMapper {
|
|||||||
|
|
||||||
static MgmtTargetAssignmentResponseBody toResponse(final DistributionSetAssignmentResult dsAssignmentResult) {
|
static MgmtTargetAssignmentResponseBody toResponse(final DistributionSetAssignmentResult dsAssignmentResult) {
|
||||||
final MgmtTargetAssignmentResponseBody result = new MgmtTargetAssignmentResponseBody();
|
final MgmtTargetAssignmentResponseBody result = new MgmtTargetAssignmentResponseBody();
|
||||||
result.setAssigned(dsAssignmentResult.getAssigned());
|
|
||||||
result.setAlreadyAssigned(dsAssignmentResult.getAlreadyAssigned());
|
result.setAlreadyAssigned(dsAssignmentResult.getAlreadyAssigned());
|
||||||
result.setTotal(dsAssignmentResult.getTotal());
|
result.setAssignedActions(dsAssignmentResult.getAssignedEntity().stream()
|
||||||
|
.map(a -> new MgmtActionId(a.getTarget().getControllerId(), a.getId())).collect(Collectors.toList()));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.eclipse.hawkbit.mgmt.rest.resource;
|
package org.eclipse.hawkbit.mgmt.rest.resource;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -286,7 +286,8 @@ public class MgmtTargetResource implements MgmtTargetRestApi {
|
|||||||
|
|
||||||
if (offline) {
|
if (offline) {
|
||||||
return ResponseEntity.ok(MgmtDistributionSetMapper.toResponse(
|
return ResponseEntity.ok(MgmtDistributionSetMapper.toResponse(
|
||||||
deploymentManagement.offlineAssignedDistributionSet(dsId.getId(), Arrays.asList(targetId))));
|
deploymentManagement.offlineAssignedDistributionSet(dsId.getId(),
|
||||||
|
Collections.singletonList(targetId))));
|
||||||
}
|
}
|
||||||
|
|
||||||
findTargetWithExceptionIfNotFound(targetId);
|
findTargetWithExceptionIfNotFound(targetId);
|
||||||
@@ -294,7 +295,7 @@ public class MgmtTargetResource implements MgmtTargetRestApi {
|
|||||||
|
|
||||||
if (maintenanceWindow == null) {
|
if (maintenanceWindow == null) {
|
||||||
return ResponseEntity.ok(MgmtDistributionSetMapper.toResponse(this.deploymentManagement
|
return ResponseEntity.ok(MgmtDistributionSetMapper.toResponse(this.deploymentManagement
|
||||||
.assignDistributionSet(dsId.getId(), Arrays.asList(new TargetWithActionType(targetId,
|
.assignDistributionSet(dsId.getId(), Collections.singletonList(new TargetWithActionType(targetId,
|
||||||
MgmtRestModelMapper.convertActionType(dsId.getType()), dsId.getForcetime())))));
|
MgmtRestModelMapper.convertActionType(dsId.getType()), dsId.getForcetime())))));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,7 +307,7 @@ public class MgmtTargetResource implements MgmtTargetRestApi {
|
|||||||
|
|
||||||
return ResponseEntity
|
return ResponseEntity
|
||||||
.ok(MgmtDistributionSetMapper.toResponse(this.deploymentManagement.assignDistributionSet(dsId.getId(),
|
.ok(MgmtDistributionSetMapper.toResponse(this.deploymentManagement.assignDistributionSet(dsId.getId(),
|
||||||
Arrays.asList(new TargetWithActionType(targetId,
|
Collections.singletonList(new TargetWithActionType(targetId,
|
||||||
MgmtRestModelMapper.convertActionType(dsId.getType()), dsId.getForcetime(),
|
MgmtRestModelMapper.convertActionType(dsId.getType()), dsId.getForcetime(),
|
||||||
cronSchedule, duration, timezone)))));
|
cronSchedule, duration, timezone)))));
|
||||||
|
|
||||||
|
|||||||
@@ -1210,14 +1210,16 @@ public class MgmtTargetResourceTest extends AbstractManagementApiIntegrationTest
|
|||||||
|
|
||||||
// Update
|
// Update
|
||||||
if (schedule == null) {
|
if (schedule == null) {
|
||||||
final List<Target> updatedTargets = assignDistributionSet(one, Arrays.asList(target)).getAssignedEntity();
|
final List<Target> updatedTargets = assignDistributionSet(one, Arrays.asList(target)).getAssignedEntity()
|
||||||
|
.stream().map(Action::getTarget).collect(Collectors.toList());
|
||||||
// 2nd update
|
// 2nd update
|
||||||
// sleep 10ms to ensure that we can sort by reportedAt
|
// sleep 10ms to ensure that we can sort by reportedAt
|
||||||
Thread.sleep(10);
|
Thread.sleep(10);
|
||||||
assignDistributionSet(two, updatedTargets);
|
assignDistributionSet(two, updatedTargets);
|
||||||
} else {
|
} else {
|
||||||
final List<Target> updatedTargets = assignDistributionSetWithMaintenanceWindow(one.getId(),
|
final List<Target> updatedTargets = assignDistributionSetWithMaintenanceWindow(one.getId(),
|
||||||
target.getControllerId(), schedule, duration, timezone).getAssignedEntity();
|
target.getControllerId(), schedule, duration, timezone).getAssignedEntity().stream()
|
||||||
|
.map(Action::getTarget).collect(Collectors.toList());
|
||||||
// 2nd update
|
// 2nd update
|
||||||
// sleep 10ms to ensure that we can sort by reportedAt
|
// sleep 10ms to ensure that we can sort by reportedAt
|
||||||
Thread.sleep(10);
|
Thread.sleep(10);
|
||||||
@@ -1238,9 +1240,8 @@ public class MgmtTargetResourceTest extends AbstractManagementApiIntegrationTest
|
|||||||
public void updateAction() throws Exception {
|
public void updateAction() throws Exception {
|
||||||
final Target target = testdataFactory.createTarget();
|
final Target target = testdataFactory.createTarget();
|
||||||
final DistributionSet set = testdataFactory.createDistributionSet();
|
final DistributionSet set = testdataFactory.createDistributionSet();
|
||||||
final Long actionId = deploymentManagement
|
final Long actionId = getFirstAssignedActionId(deploymentManagement.assignDistributionSet(set.getId(),
|
||||||
.assignDistributionSet(set.getId(), ActionType.SOFT, 0, Arrays.asList(target.getControllerId()))
|
ActionType.SOFT, 0, Collections.singletonList(target.getControllerId())));
|
||||||
.getActionIds().get(0);
|
|
||||||
assertThat(deploymentManagement.findAction(actionId).get().getActionType()).isEqualTo(ActionType.SOFT);
|
assertThat(deploymentManagement.findAction(actionId).get().getActionType()).isEqualTo(ActionType.SOFT);
|
||||||
|
|
||||||
final String body = new JSONObject().put("forceType", "forced").toString();
|
final String body = new JSONObject().put("forceType", "forced").toString();
|
||||||
|
|||||||
@@ -577,6 +577,9 @@ include::{snippets}/targets/post-assign-distribution-set-to-target/http-request.
|
|||||||
|
|
||||||
=== Response (Status 200)
|
=== Response (Status 200)
|
||||||
|
|
||||||
|
==== Response fields
|
||||||
|
include::{snippets}/targets/post-assign-distribution-set-to-target/response-fields.adoc[]
|
||||||
|
|
||||||
==== Response example
|
==== Response example
|
||||||
|
|
||||||
include::{snippets}/targets/post-assign-distribution-set-to-target/http-response.adoc[]
|
include::{snippets}/targets/post-assign-distribution-set-to-target/http-response.adoc[]
|
||||||
|
|||||||
@@ -137,9 +137,8 @@ public class RootControllerDocumentationTest extends AbstractApiRestDocumentatio
|
|||||||
});
|
});
|
||||||
|
|
||||||
final Target target = targetManagement.create(entityFactory.target().create().controllerId(CONTROLLER_ID));
|
final Target target = targetManagement.create(entityFactory.target().create().controllerId(CONTROLLER_ID));
|
||||||
final Long actionId = deploymentManagement
|
final Long actionId = getFirstAssignedActionId(deploymentManagement.assignDistributionSet(set.getId(),
|
||||||
.assignDistributionSet(set.getId(), Arrays.asList(target.getTargetWithActionType())).getActionIds()
|
Arrays.asList(target.getTargetWithActionType())));
|
||||||
.get(0);
|
|
||||||
final Action cancelAction = deploymentManagement.cancelAction(actionId);
|
final Action cancelAction = deploymentManagement.cancelAction(actionId);
|
||||||
|
|
||||||
mockMvc.perform(
|
mockMvc.perform(
|
||||||
@@ -170,9 +169,8 @@ public class RootControllerDocumentationTest extends AbstractApiRestDocumentatio
|
|||||||
final DistributionSet set = testdataFactory.createDistributionSet("one");
|
final DistributionSet set = testdataFactory.createDistributionSet("one");
|
||||||
|
|
||||||
final Target target = targetManagement.create(entityFactory.target().create().controllerId(CONTROLLER_ID));
|
final Target target = targetManagement.create(entityFactory.target().create().controllerId(CONTROLLER_ID));
|
||||||
final Long actionId = deploymentManagement
|
final Long actionId = getFirstAssignedActionId(deploymentManagement.assignDistributionSet(set.getId(),
|
||||||
.assignDistributionSet(set.getId(), Arrays.asList(target.getTargetWithActionType())).getActionIds()
|
Arrays.asList(target.getTargetWithActionType())));
|
||||||
.get(0);
|
|
||||||
final Action cancelAction = deploymentManagement.cancelAction(actionId);
|
final Action cancelAction = deploymentManagement.cancelAction(actionId);
|
||||||
|
|
||||||
mockMvc.perform(post(
|
mockMvc.perform(post(
|
||||||
@@ -264,8 +262,8 @@ public class RootControllerDocumentationTest extends AbstractApiRestDocumentatio
|
|||||||
.key("aMetadataKey").value("Metadata value as defined in software module").targetVisible(true));
|
.key("aMetadataKey").value("Metadata value as defined in software module").targetVisible(true));
|
||||||
|
|
||||||
final Target target = targetManagement.create(entityFactory.target().create().controllerId(CONTROLLER_ID));
|
final Target target = targetManagement.create(entityFactory.target().create().controllerId(CONTROLLER_ID));
|
||||||
final Long actionId = assignDistributionSetWithMaintenanceWindow(set.getId(), target.getControllerId(),
|
final Long actionId = getFirstAssignedActionId(assignDistributionSetWithMaintenanceWindow(set.getId(),
|
||||||
getTestSchedule(-5), getTestDuration(10), getTestTimeZone()).getActionIds().get(0);
|
target.getControllerId(), getTestSchedule(-5), getTestDuration(10), getTestTimeZone()));
|
||||||
|
|
||||||
controllerManagement.addInformationalActionStatus(
|
controllerManagement.addInformationalActionStatus(
|
||||||
entityFactory.actionStatus().create(actionId).message("Started download").status(Status.DOWNLOAD));
|
entityFactory.actionStatus().create(actionId).message("Started download").status(Status.DOWNLOAD));
|
||||||
@@ -348,8 +346,8 @@ public class RootControllerDocumentationTest extends AbstractApiRestDocumentatio
|
|||||||
final DistributionSet set = testdataFactory.createDistributionSet("one");
|
final DistributionSet set = testdataFactory.createDistributionSet("one");
|
||||||
|
|
||||||
final Target target = targetManagement.create(entityFactory.target().create().controllerId(CONTROLLER_ID));
|
final Target target = targetManagement.create(entityFactory.target().create().controllerId(CONTROLLER_ID));
|
||||||
final Long actionId = assignDistributionSetWithMaintenanceWindow(set.getId(), target.getControllerId(),
|
final Long actionId = getFirstAssignedActionId(assignDistributionSetWithMaintenanceWindow(set.getId(),
|
||||||
getTestSchedule(2), getTestDuration(1), getTestTimeZone()).getActionIds().get(0);
|
target.getControllerId(), getTestSchedule(2), getTestDuration(1), getTestTimeZone()));
|
||||||
|
|
||||||
mockMvc.perform(get(
|
mockMvc.perform(get(
|
||||||
DdiRestConstants.BASE_V1_REQUEST_MAPPING + "/{controllerId}/" + DdiRestConstants.DEPLOYMENT_BASE_ACTION
|
DdiRestConstants.BASE_V1_REQUEST_MAPPING + "/{controllerId}/" + DdiRestConstants.DEPLOYMENT_BASE_ACTION
|
||||||
@@ -389,9 +387,8 @@ public class RootControllerDocumentationTest extends AbstractApiRestDocumentatio
|
|||||||
final DistributionSet set = testdataFactory.createDistributionSet("one");
|
final DistributionSet set = testdataFactory.createDistributionSet("one");
|
||||||
|
|
||||||
final Target target = targetManagement.create(entityFactory.target().create().controllerId(CONTROLLER_ID));
|
final Target target = targetManagement.create(entityFactory.target().create().controllerId(CONTROLLER_ID));
|
||||||
final Long actionId = deploymentManagement
|
final Long actionId = getFirstAssignedActionId(deploymentManagement.assignDistributionSet(set.getId(),
|
||||||
.assignDistributionSet(set.getId(), Arrays.asList(target.getTargetWithActionType())).getActionIds()
|
Arrays.asList(target.getTargetWithActionType())));
|
||||||
.get(0);
|
|
||||||
|
|
||||||
mockMvc.perform(post(DdiRestConstants.BASE_V1_REQUEST_MAPPING + "/{controllerId}/"
|
mockMvc.perform(post(DdiRestConstants.BASE_V1_REQUEST_MAPPING + "/{controllerId}/"
|
||||||
+ DdiRestConstants.DEPLOYMENT_BASE_ACTION + "/{actionId}/feedback", tenantAware.getCurrentTenant(),
|
+ DdiRestConstants.DEPLOYMENT_BASE_ACTION + "/{actionId}/feedback", tenantAware.getCurrentTenant(),
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import static org.springframework.restdocs.snippet.Attributes.key;
|
|||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.apache.commons.lang3.RandomStringUtils;
|
import org.apache.commons.lang3.RandomStringUtils;
|
||||||
import org.eclipse.hawkbit.ddi.rest.resource.DdiApiConfiguration;
|
import org.eclipse.hawkbit.ddi.rest.resource.DdiApiConfiguration;
|
||||||
@@ -167,20 +168,23 @@ public abstract class AbstractApiRestDocumentation extends AbstractRestIntegrati
|
|||||||
|
|
||||||
private List<Target> assignWithoutMaintenanceWindow(final DistributionSet distributionSet, final Target savedTarget,
|
private List<Target> assignWithoutMaintenanceWindow(final DistributionSet distributionSet, final Target savedTarget,
|
||||||
final boolean timeforced) {
|
final boolean timeforced) {
|
||||||
return timeforced ? assignDistributionSetTimeForced(distributionSet, savedTarget).getAssignedEntity()
|
final List<Action> actions = timeforced
|
||||||
|
? assignDistributionSetTimeForced(distributionSet, savedTarget).getAssignedEntity()
|
||||||
: assignDistributionSet(distributionSet, savedTarget).getAssignedEntity();
|
: assignDistributionSet(distributionSet, savedTarget).getAssignedEntity();
|
||||||
|
return actions.stream().map(Action::getTarget).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Target> assignWithMaintenanceWindow(final DistributionSet distributionSet, final Target savedTarget,
|
private List<Target> assignWithMaintenanceWindow(final DistributionSet distributionSet, final Target savedTarget,
|
||||||
final boolean timeforced, final String maintenanceWindowSchedule, final String maintenanceWindowDuration,
|
final boolean timeforced, final String maintenanceWindowSchedule, final String maintenanceWindowDuration,
|
||||||
final String maintenanceWindowTimeZone) {
|
final String maintenanceWindowTimeZone) {
|
||||||
return timeforced
|
final List<Action> actions = timeforced
|
||||||
? assignDistributionSetWithMaintenanceWindowTimeForced(distributionSet.getId(),
|
? assignDistributionSetWithMaintenanceWindowTimeForced(distributionSet.getId(),
|
||||||
savedTarget.getControllerId(), maintenanceWindowSchedule, maintenanceWindowDuration,
|
savedTarget.getControllerId(), maintenanceWindowSchedule, maintenanceWindowDuration,
|
||||||
maintenanceWindowTimeZone).getAssignedEntity()
|
maintenanceWindowTimeZone).getAssignedEntity()
|
||||||
: assignDistributionSetWithMaintenanceWindow(distributionSet.getId(), savedTarget.getControllerId(),
|
: assignDistributionSetWithMaintenanceWindow(distributionSet.getId(), savedTarget.getControllerId(),
|
||||||
maintenanceWindowSchedule, maintenanceWindowDuration, maintenanceWindowTimeZone)
|
maintenanceWindowSchedule, maintenanceWindowDuration, maintenanceWindowTimeZone)
|
||||||
.getAssignedEntity();
|
.getAssignedEntity();
|
||||||
|
return actions.stream().map(Action::getTarget).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected DistributionSet createDistributionSet() {
|
protected DistributionSet createDistributionSet() {
|
||||||
|
|||||||
@@ -211,4 +211,5 @@ public final class MgmtApiModelProperties {
|
|||||||
public static final String CONFIG_GLOBAL = "true - if the current value is the global configuration value, false - if there is a tenant specific value configured.";
|
public static final String CONFIG_GLOBAL = "true - if the current value is the global configuration value, false - if there is a tenant specific value configured.";
|
||||||
public static final String CONFIG_PARAM = "The name of the configuration parameter.";
|
public static final String CONFIG_PARAM = "The name of the configuration parameter.";
|
||||||
|
|
||||||
|
public static final String DS_NEW_ASSIGNED_ACTIONS = "The newly created actions as a result of this assignment";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,9 +23,11 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
|||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.eclipse.hawkbit.im.authentication.SpPermission;
|
import org.eclipse.hawkbit.im.authentication.SpPermission;
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
||||||
|
import org.eclipse.hawkbit.repository.model.Action;
|
||||||
import org.eclipse.hawkbit.repository.model.Action.Status;
|
import org.eclipse.hawkbit.repository.model.Action.Status;
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSet;
|
import org.eclipse.hawkbit.repository.model.DistributionSet;
|
||||||
import org.eclipse.hawkbit.repository.model.SoftwareModule;
|
import org.eclipse.hawkbit.repository.model.SoftwareModule;
|
||||||
@@ -306,7 +308,8 @@ public class DistributionSetsDocumentationTest extends AbstractApiRestDocumentat
|
|||||||
final DistributionSet set = testdataFactory.createUpdatedDistributionSet();
|
final DistributionSet set = testdataFactory.createUpdatedDistributionSet();
|
||||||
|
|
||||||
final List<Target> targets = assignDistributionSet(set,
|
final List<Target> targets = assignDistributionSet(set,
|
||||||
testdataFactory.createTargets(5, "targetMisc", "Test targets for query")).getAssignedEntity();
|
testdataFactory.createTargets(5, "targetMisc", "Test targets for query")).getAssignedEntity().stream()
|
||||||
|
.map(Action::getTarget).collect(Collectors.toList());
|
||||||
testdataFactory.sendUpdateActionStatusToTargets(targets, Status.FINISHED, "some message");
|
testdataFactory.sendUpdateActionStatusToTargets(targets, Status.FINISHED, "some message");
|
||||||
|
|
||||||
mockMvc.perform(
|
mockMvc.perform(
|
||||||
@@ -396,6 +399,12 @@ public class DistributionSetsDocumentationTest extends AbstractApiRestDocumentat
|
|||||||
fieldWithPath("assigned").description(MgmtApiModelProperties.DS_NEW_ASSIGNED_TARGETS),
|
fieldWithPath("assigned").description(MgmtApiModelProperties.DS_NEW_ASSIGNED_TARGETS),
|
||||||
fieldWithPath("alreadyAssigned").type(JsonFieldType.NUMBER)
|
fieldWithPath("alreadyAssigned").type(JsonFieldType.NUMBER)
|
||||||
.description(MgmtApiModelProperties.DS_ALREADY_ASSIGNED_TARGETS),
|
.description(MgmtApiModelProperties.DS_ALREADY_ASSIGNED_TARGETS),
|
||||||
|
fieldWithPath("assignedActions").type(JsonFieldType.ARRAY)
|
||||||
|
.description(MgmtApiModelProperties.DS_NEW_ASSIGNED_ACTIONS),
|
||||||
|
fieldWithPath("assignedActions.[].id").type(JsonFieldType.NUMBER)
|
||||||
|
.description(MgmtApiModelProperties.ACTION_ID),
|
||||||
|
fieldWithPath("assignedActions.[]._links.self").type(JsonFieldType.OBJECT)
|
||||||
|
.description(MgmtApiModelProperties.LINK_TO_ACTION),
|
||||||
fieldWithPath("total").type(JsonFieldType.NUMBER)
|
fieldWithPath("total").type(JsonFieldType.NUMBER)
|
||||||
.description(MgmtApiModelProperties.DS_TOTAL_ASSIGNED_TARGETS))));
|
.description(MgmtApiModelProperties.DS_TOTAL_ASSIGNED_TARGETS))));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
|||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -395,9 +395,8 @@ public class TargetResourceDocumentationTest extends AbstractApiRestDocumentatio
|
|||||||
public void switchActionToForced() throws Exception {
|
public void switchActionToForced() throws Exception {
|
||||||
final Target target = testdataFactory.createTarget(targetId);
|
final Target target = testdataFactory.createTarget(targetId);
|
||||||
final DistributionSet set = testdataFactory.createDistributionSet();
|
final DistributionSet set = testdataFactory.createDistributionSet();
|
||||||
final Long actionId = deploymentManagement
|
final Long actionId = getFirstAssignedActionId(deploymentManagement.assignDistributionSet(set.getId(),
|
||||||
.assignDistributionSet(set.getId(), ActionType.SOFT, 0, Arrays.asList(target.getControllerId()))
|
ActionType.SOFT, 0, Collections.singletonList(target.getControllerId())));
|
||||||
.getActionIds().get(0);
|
|
||||||
assertThat(deploymentManagement.findAction(actionId).get().getActionType()).isEqualTo(ActionType.SOFT);
|
assertThat(deploymentManagement.findAction(actionId).get().getActionType()).isEqualTo(ActionType.SOFT);
|
||||||
|
|
||||||
final Map<String, Object> body = new HashMap<>();
|
final Map<String, Object> body = new HashMap<>();
|
||||||
@@ -490,8 +489,12 @@ public class TargetResourceDocumentationTest extends AbstractApiRestDocumentatio
|
|||||||
@Test
|
@Test
|
||||||
@Description("Handles the POST request for assigning a distribution set to a specific target. Required Permission: READ_REPOSITORY and UPDATE_TARGET.")
|
@Description("Handles the POST request for assigning a distribution set to a specific target. Required Permission: READ_REPOSITORY and UPDATE_TARGET.")
|
||||||
public void postAssignDistributionSetToTarget() throws Exception {
|
public void postAssignDistributionSetToTarget() throws Exception {
|
||||||
testdataFactory.createTarget(targetId);
|
// create target and ds, and assign ds
|
||||||
|
testdataFactory.createTarget(targetId + "-old");
|
||||||
final DistributionSet set = testdataFactory.createDistributionSet("one");
|
final DistributionSet set = testdataFactory.createDistributionSet("one");
|
||||||
|
assignDistributionSet(set.getId(), targetId + "-old");
|
||||||
|
|
||||||
|
testdataFactory.createTarget(targetId);
|
||||||
|
|
||||||
final long forceTime = System.currentTimeMillis();
|
final long forceTime = System.currentTimeMillis();
|
||||||
final String body = new JSONObject().put("id", set.getId()).put("type", "timeforced")
|
final String body = new JSONObject().put("id", set.getId()).put("type", "timeforced")
|
||||||
@@ -502,7 +505,7 @@ public class TargetResourceDocumentationTest extends AbstractApiRestDocumentatio
|
|||||||
|
|
||||||
mockMvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/"
|
mockMvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/"
|
||||||
+ MgmtRestConstants.TARGET_V1_ASSIGNED_DISTRIBUTION_SET, targetId).content(body)
|
+ MgmtRestConstants.TARGET_V1_ASSIGNED_DISTRIBUTION_SET, targetId).content(body)
|
||||||
.contentType(MediaType.APPLICATION_JSON_UTF8))
|
.contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andDo(this.document.document(
|
.andDo(this.document.document(
|
||||||
pathParameters(parameterWithName("targetId").description(ApiModelPropertiesGeneric.ITEM_ID)),
|
pathParameters(parameterWithName("targetId").description(ApiModelPropertiesGeneric.ITEM_ID)),
|
||||||
@@ -524,6 +527,12 @@ public class TargetResourceDocumentationTest extends AbstractApiRestDocumentatio
|
|||||||
fieldWithPath("assigned").description(MgmtApiModelProperties.DS_NEW_ASSIGNED_TARGETS),
|
fieldWithPath("assigned").description(MgmtApiModelProperties.DS_NEW_ASSIGNED_TARGETS),
|
||||||
fieldWithPath("alreadyAssigned").type(JsonFieldType.NUMBER)
|
fieldWithPath("alreadyAssigned").type(JsonFieldType.NUMBER)
|
||||||
.description(MgmtApiModelProperties.DS_ALREADY_ASSIGNED_TARGETS),
|
.description(MgmtApiModelProperties.DS_ALREADY_ASSIGNED_TARGETS),
|
||||||
|
fieldWithPath("assignedActions").type(JsonFieldType.ARRAY)
|
||||||
|
.description(MgmtApiModelProperties.DS_NEW_ASSIGNED_ACTIONS),
|
||||||
|
fieldWithPath("assignedActions.[].id").type(JsonFieldType.NUMBER)
|
||||||
|
.description(MgmtApiModelProperties.ACTION_ID),
|
||||||
|
fieldWithPath("assignedActions.[]._links.self").type(JsonFieldType.OBJECT)
|
||||||
|
.description(MgmtApiModelProperties.LINK_TO_ACTION),
|
||||||
fieldWithPath("total").type(JsonFieldType.NUMBER)
|
fieldWithPath("total").type(JsonFieldType.NUMBER)
|
||||||
.description(MgmtApiModelProperties.DS_TOTAL_ASSIGNED_TARGETS))));
|
.description(MgmtApiModelProperties.DS_TOTAL_ASSIGNED_TARGETS))));
|
||||||
}
|
}
|
||||||
@@ -630,7 +639,7 @@ public class TargetResourceDocumentationTest extends AbstractApiRestDocumentatio
|
|||||||
final String knownValue = "knownValue";
|
final String knownValue = "knownValue";
|
||||||
final Target testTarget = testdataFactory.createTarget(targetId);
|
final Target testTarget = testdataFactory.createTarget(targetId);
|
||||||
targetManagement.createMetaData(testTarget.getControllerId(),
|
targetManagement.createMetaData(testTarget.getControllerId(),
|
||||||
Arrays.asList(entityFactory.generateTargetMetadata(knownKey, knownValue)));
|
Collections.singletonList(entityFactory.generateTargetMetadata(knownKey, knownValue)));
|
||||||
|
|
||||||
mockMvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/metadata/{metadatakey}",
|
mockMvc.perform(get(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/metadata/{metadatakey}",
|
||||||
testTarget.getControllerId(), knownKey)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
testTarget.getControllerId(), knownKey)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
@@ -652,7 +661,7 @@ public class TargetResourceDocumentationTest extends AbstractApiRestDocumentatio
|
|||||||
|
|
||||||
final Target testTarget = testdataFactory.createTarget(targetId);
|
final Target testTarget = testdataFactory.createTarget(targetId);
|
||||||
targetManagement.createMetaData(testTarget.getControllerId(),
|
targetManagement.createMetaData(testTarget.getControllerId(),
|
||||||
Arrays.asList(entityFactory.generateTargetMetadata(knownKey, knownValue)));
|
Collections.singletonList(entityFactory.generateTargetMetadata(knownKey, knownValue)));
|
||||||
|
|
||||||
final JSONObject jsonObject = new JSONObject().put("key", knownKey).put("value", updateValue);
|
final JSONObject jsonObject = new JSONObject().put("key", knownKey).put("value", updateValue);
|
||||||
|
|
||||||
@@ -679,7 +688,7 @@ public class TargetResourceDocumentationTest extends AbstractApiRestDocumentatio
|
|||||||
|
|
||||||
final Target testTarget = testdataFactory.createTarget(targetId);
|
final Target testTarget = testdataFactory.createTarget(targetId);
|
||||||
targetManagement.createMetaData(testTarget.getControllerId(),
|
targetManagement.createMetaData(testTarget.getControllerId(),
|
||||||
Arrays.asList(entityFactory.generateTargetMetadata(knownKey, knownValue)));
|
Collections.singletonList(entityFactory.generateTargetMetadata(knownKey, knownValue)));
|
||||||
|
|
||||||
mockMvc.perform(delete(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/metadata/{key}",
|
mockMvc.perform(delete(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/{targetId}/metadata/{key}",
|
||||||
testTarget.getControllerId(), knownKey)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
testTarget.getControllerId(), knownKey)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
|
|||||||
@@ -88,7 +88,6 @@ import org.vaadin.spring.events.EventBus.UIEventBus;
|
|||||||
import org.vaadin.spring.events.EventScope;
|
import org.vaadin.spring.events.EventScope;
|
||||||
import org.vaadin.spring.events.annotation.EventBusListenerMethod;
|
import org.vaadin.spring.events.annotation.EventBusListenerMethod;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.vaadin.data.Container;
|
import com.vaadin.data.Container;
|
||||||
import com.vaadin.data.Item;
|
import com.vaadin.data.Item;
|
||||||
@@ -547,21 +546,19 @@ public class TargetTable extends AbstractTable<Target> {
|
|||||||
* @return TagAssigmentResult with all meta data of the assignment outcome.
|
* @return TagAssigmentResult with all meta data of the assignment outcome.
|
||||||
*/
|
*/
|
||||||
public TargetTagAssignmentResult toggleTagAssignment(final Collection<Long> targetIds, final String targTagName) {
|
public TargetTagAssignmentResult toggleTagAssignment(final Collection<Long> targetIds, final String targTagName) {
|
||||||
final List<String> controllerIds = targetManagement.get(targetIds).stream().map(Target::getControllerId)
|
final List<Target> targets = targetManagement.get(targetIds);
|
||||||
.collect(Collectors.toList());
|
if (targets.isEmpty()) {
|
||||||
if (controllerIds.isEmpty()) {
|
|
||||||
getNotification().displayWarning(getI18n().getMessage("targets.not.exists"));
|
getNotification().displayWarning(getI18n().getMessage("targets.not.exists"));
|
||||||
return new TargetTagAssignmentResult(0, 0, 0, Lists.newArrayListWithCapacity(0),
|
return new TargetTagAssignmentResult(0, Collections.emptyList(), Collections.emptyList(), null);
|
||||||
Lists.newArrayListWithCapacity(0), null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final Optional<TargetTag> tag = tagManagement.getByName(targTagName);
|
final Optional<TargetTag> tag = tagManagement.getByName(targTagName);
|
||||||
if (!tag.isPresent()) {
|
if (!tag.isPresent()) {
|
||||||
getNotification().displayWarning(getI18n().getMessage("targettag.not.exists", targTagName));
|
getNotification().displayWarning(getI18n().getMessage("targettag.not.exists", targTagName));
|
||||||
return new TargetTagAssignmentResult(0, 0, 0, Lists.newArrayListWithCapacity(0),
|
return new TargetTagAssignmentResult(0, Collections.emptyList(), Collections.emptyList(), null);
|
||||||
Lists.newArrayListWithCapacity(0), null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final List<String> controllerIds = targets.stream().map(Target::getControllerId).collect(Collectors.toList());
|
||||||
final TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(controllerIds, targTagName);
|
final TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(controllerIds, targTagName);
|
||||||
|
|
||||||
getNotification().displaySuccess(HawkbitCommonUtil.createAssignmentMessage(targTagName, result, getI18n()));
|
getNotification().displaySuccess(HawkbitCommonUtil.createAssignmentMessage(targTagName, result, getI18n()));
|
||||||
@@ -988,4 +985,4 @@ public class TargetTable extends AbstractTable<Target> {
|
|||||||
.getConfigurationValue(TenantConfigurationKey.MULTI_ASSIGNMENTS_ENABLED, Boolean.class).getValue());
|
.getConfigurationValue(TenantConfigurationKey.MULTI_ASSIGNMENTS_ENABLED, Boolean.class).getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import java.util.Locale;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
|
|
||||||
import org.eclipse.hawkbit.repository.model.AssignmentResult;
|
import org.eclipse.hawkbit.repository.model.AbstractAssignmentResult;
|
||||||
import org.eclipse.hawkbit.repository.model.NamedEntity;
|
import org.eclipse.hawkbit.repository.model.NamedEntity;
|
||||||
import org.eclipse.hawkbit.repository.model.PollStatus;
|
import org.eclipse.hawkbit.repository.model.PollStatus;
|
||||||
import org.eclipse.hawkbit.repository.model.RolloutGroup;
|
import org.eclipse.hawkbit.repository.model.RolloutGroup;
|
||||||
@@ -294,7 +294,7 @@ public final class HawkbitCommonUtil {
|
|||||||
* @return message
|
* @return message
|
||||||
*/
|
*/
|
||||||
public static String createAssignmentMessage(final String tagName,
|
public static String createAssignmentMessage(final String tagName,
|
||||||
final AssignmentResult<? extends NamedEntity> result, final VaadinMessageSource i18n) {
|
final AbstractAssignmentResult<? extends NamedEntity> result, final VaadinMessageSource i18n) {
|
||||||
final StringBuilder formMsg = new StringBuilder();
|
final StringBuilder formMsg = new StringBuilder();
|
||||||
final int assignedCount = result.getAssigned();
|
final int assignedCount = result.getAssigned();
|
||||||
final int alreadyAssignedCount = result.getAlreadyAssigned();
|
final int alreadyAssignedCount = result.getAlreadyAssigned();
|
||||||
|
|||||||
Reference in New Issue
Block a user