From 6d17ffa70448f95a0b7bbfd643696aed2fab3a8f Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 12 May 2017 17:38:06 +0200 Subject: [PATCH] Feature action status retrieval in controller management (#514) * Add findActionStatusByAction to controller management to allow device facing APIs to access this under controller authentication Signed-off-by: kaizimmerm * Use repository directly. Signed-off-by: kaizimmerm --- .../repository/ControllerManagement.java | 18 ++++++++++++ .../jpa/JpaControllerManagement.java | 11 +++++++ .../jpa/ControllerManagementTest.java | 29 ++++++++++--------- 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java index 2276ee005..3211eee8a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/ControllerManagement.java @@ -29,6 +29,8 @@ import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationProperties.TenantConfigurationKey; import org.hibernate.validator.constraints.NotEmpty; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.security.access.prepost.PreAuthorize; /** @@ -138,6 +140,22 @@ public interface ControllerManagement { @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) Optional findActionWithDetails(@NotNull Long actionId); + /** + * Retrieves all the {@link ActionStatus} entries of the given + * {@link Action}. + * + * @param pageReq + * pagination parameter + * @param actionId + * to be filtered on + * @return the corresponding {@link Page} of {@link ActionStatus} + * + * @throws EntityNotFoundException + * if action with given ID does not exist + */ + @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) + Page findActionStatusByAction(@NotNull Pageable pageReq, @NotNull Long actionId); + /** * register new target in the repository (plug-and-play). * diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java index 1326f6fb0..99ffba6ca 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaControllerManagement.java @@ -58,6 +58,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationEventPublisher; import org.springframework.dao.ConcurrencyFailureException; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.jpa.domain.Specification; @@ -511,4 +513,13 @@ public class JpaControllerManagement implements ControllerManagement { return Optional.ofNullable(targetRepository.findOne(targetId)); } + @Override + public Page findActionStatusByAction(final Pageable pageReq, final Long actionId) { + if (!actionRepository.exists(actionId)) { + throw new EntityNotFoundException(Action.class, actionId); + } + + return actionStatusRepository.findByActionId(pageReq, actionId); + } + } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java index 53c25ba73..05a6b81d5 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java @@ -106,6 +106,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { () -> controllerManagement.getActionForDownloadByTargetAndSoftwareModule(NOT_EXIST_ID, module.getId()), "Target"); + verifyThrownExceptionBy(() -> controllerManagement.findActionStatusByAction(PAGE, NOT_EXIST_IDL), "Action"); verifyThrownExceptionBy(() -> controllerManagement.hasTargetArtifactAssigned(NOT_EXIST_IDL, "XXX"), "Target"); verifyThrownExceptionBy(() -> controllerManagement.hasTargetArtifactAssigned(NOT_EXIST_ID, "XXX"), "Target"); @@ -138,7 +139,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { Action.Status.FINISHED, Action.Status.FINISHED, false); assertThat(actionStatusRepository.count()).isEqualTo(6); - assertThat(deploymentManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(6); + assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(6); } @Test @@ -161,7 +162,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { Action.Status.FINISHED, Action.Status.FINISHED, false); assertThat(actionStatusRepository.count()).isEqualTo(3); - assertThat(deploymentManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(3); + assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(3); } @Test @@ -186,7 +187,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { Action.Status.RUNNING, Action.Status.RUNNING, true); assertThat(actionStatusRepository.count()).isEqualTo(1); - assertThat(deploymentManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(1); + assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(1); } @@ -214,7 +215,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { Action.Status.CANCELED, Action.Status.FINISHED, false); assertThat(actionStatusRepository.count()).isEqualTo(7); - assertThat(deploymentManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7); + assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7); } @Test @@ -241,7 +242,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { Action.Status.CANCELED, Action.Status.CANCELED, false); assertThat(actionStatusRepository.count()).isEqualTo(7); - assertThat(deploymentManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7); + assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7); } @Test @@ -269,7 +270,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { Action.Status.RUNNING, Action.Status.CANCEL_REJECTED, true); assertThat(actionStatusRepository.count()).isEqualTo(7); - assertThat(deploymentManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7); + assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7); } @Test @@ -297,7 +298,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { Action.Status.RUNNING, Action.Status.ERROR, true); assertThat(actionStatusRepository.count()).isEqualTo(7); - assertThat(deploymentManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7); + assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7); } @Step @@ -308,8 +309,8 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { assertThat(targetManagement.findTargetByControllerID(TestdataFactory.DEFAULT_CONTROLLER_ID).get() .getUpdateStatus()).isEqualTo(TargetUpdateStatus.PENDING); - return deploymentManagement.findActiveActionsByTarget(PAGE, TestdataFactory.DEFAULT_CONTROLLER_ID) - .getContent().get(0).getId(); + return deploymentManagement.findActiveActionsByTarget(PAGE, TestdataFactory.DEFAULT_CONTROLLER_ID).getContent() + .get(0).getId(); } @Step @@ -367,7 +368,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { final Action action = deploymentManagement.findAction(actionId).get(); assertThat(action.getStatus()).isEqualTo(expectedActionActionStatus); assertThat(action.isActive()).isEqualTo(actionActive); - final List actionStatusList = deploymentManagement.findActionStatusByAction(PAGE, actionId) + final List actionStatusList = controllerManagement.findActionStatusByAction(PAGE, actionId) .getContent(); assertThat(actionStatusList.get(actionStatusList.size() - 1).getStatus()).isEqualTo(expectedActionStatus); if (actionActive) { @@ -473,7 +474,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { Action.Status.ERROR, Action.Status.ERROR, false); assertThat(actionStatusRepository.count()).isEqualTo(3); - assertThat(deploymentManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(3); + assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(3); } @@ -508,7 +509,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { Action.Status.FINISHED, Action.Status.FINISHED, false); assertThat(actionStatusRepository.count()).isEqualTo(3); - assertThat(deploymentManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(3); + assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(3); } @@ -534,7 +535,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { .getUpdateStatus()).isEqualTo(TargetUpdateStatus.IN_SYNC); assertThat(actionStatusRepository.count()).isEqualTo(3); - assertThat(deploymentManagement.findActionStatusByAction(PAGE, action.getId()).getNumberOfElements()) + assertThat(controllerManagement.findActionStatusByAction(PAGE, action.getId()).getNumberOfElements()) .isEqualTo(3); } @@ -560,7 +561,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { // however, additional action status has been stored assertThat(actionStatusRepository.findAll(PAGE).getNumberOfElements()).isEqualTo(4); - assertThat(deploymentManagement.findActionStatusByAction(PAGE, action.getId()).getNumberOfElements()) + assertThat(controllerManagement.findActionStatusByAction(PAGE, action.getId()).getNumberOfElements()) .isEqualTo(4); }