diff --git a/hawkbit-rest/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java b/hawkbit-rest/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java index 0cee352c1..470419ca9 100644 --- a/hawkbit-rest/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java +++ b/hawkbit-rest/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResource.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.mgmt.rest.resource; import java.util.List; +import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; @@ -271,6 +272,11 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi { final RolloutGroup rolloutGroup = rolloutGroupManagement.getWithDetailedStatus(groupId) .orElseThrow(() -> new EntityNotFoundException(RolloutGroup.class, rolloutId)); + + if (!Objects.equals(rolloutId, rolloutGroup.getRollout().getId())) { + throw new EntityNotFoundException(RolloutGroup.class, groupId); + } + return ResponseEntity.ok(MgmtRolloutMapper.toResponseRolloutGroup(rolloutGroup, true, tenantConfigHelper.isConfirmationFlowEnabled())); } diff --git a/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java b/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java index 41f1c5850..9543517a5 100644 --- a/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java +++ b/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java @@ -683,6 +683,33 @@ class MgmtRolloutResourceTest extends AbstractManagementApiIntegrationTest { : jsonPath("confirmationRequired").doesNotExist()); } + @Test + @Description("The relation between deploy group and rollout should be validated.") + void deployGroupsShouldValidateRelationWithRollout() throws Exception { + // setup + final int amountTargets = 8; + testdataFactory.createTargets(amountTargets, "rollout", "rollout"); + final DistributionSet dsA = testdataFactory.createDistributionSet(""); + + // create rollout including the created targets with prefix 'rollout' + final Rollout rollout1 = createRollout("rollout1", 4, dsA.getId(), "controllerId==rollout*", + false); + + final Rollout rollout2 = createRollout("rollout2", 1, dsA.getId(), "controllerId==rollout*", + false); + + rolloutManagement.start(rollout1.getId()); + rolloutManagement.start(rollout2.getId()); + rolloutHandler.handleAll(); + + final RolloutGroup firstGroup = rolloutGroupManagement + .findByRollout(PageRequest.of(0, 1, Direction.ASC, "id"), rollout1.getId()).getContent().get(0); + + // make request for firstGroupId and the rolloutId of the second rollout (the one with no groups) + mvc.perform(get("/rest/v1/rollouts/{rolloutId}/deploygroups/{groupId}", rollout2.getId(), firstGroup.getId()) + .accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound()); + } + @Test @Description("Testing that starting the rollout switches the state to starting and then to running") void startingRolloutSwitchesIntoRunningState() throws Exception {