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 <kai.zimmermann@bosch-si.com> * Use repository directly. Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>
This commit is contained in:
@@ -29,6 +29,8 @@ import org.eclipse.hawkbit.repository.model.Target;
|
|||||||
import org.eclipse.hawkbit.repository.model.TargetUpdateStatus;
|
import org.eclipse.hawkbit.repository.model.TargetUpdateStatus;
|
||||||
import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationProperties.TenantConfigurationKey;
|
import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationProperties.TenantConfigurationKey;
|
||||||
import org.hibernate.validator.constraints.NotEmpty;
|
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;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -138,6 +140,22 @@ public interface ControllerManagement {
|
|||||||
@PreAuthorize(SpringEvalExpressions.IS_CONTROLLER)
|
@PreAuthorize(SpringEvalExpressions.IS_CONTROLLER)
|
||||||
Optional<Action> findActionWithDetails(@NotNull Long actionId);
|
Optional<Action> 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<ActionStatus> findActionStatusByAction(@NotNull Pageable pageReq, @NotNull Long actionId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* register new target in the repository (plug-and-play).
|
* register new target in the repository (plug-and-play).
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -58,6 +58,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.ApplicationEventPublisher;
|
import org.springframework.context.ApplicationEventPublisher;
|
||||||
import org.springframework.dao.ConcurrencyFailureException;
|
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;
|
||||||
import org.springframework.data.domain.Sort.Direction;
|
import org.springframework.data.domain.Sort.Direction;
|
||||||
import org.springframework.data.jpa.domain.Specification;
|
import org.springframework.data.jpa.domain.Specification;
|
||||||
@@ -511,4 +513,13 @@ public class JpaControllerManagement implements ControllerManagement {
|
|||||||
return Optional.ofNullable(targetRepository.findOne(targetId));
|
return Optional.ofNullable(targetRepository.findOne(targetId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<ActionStatus> findActionStatusByAction(final Pageable pageReq, final Long actionId) {
|
||||||
|
if (!actionRepository.exists(actionId)) {
|
||||||
|
throw new EntityNotFoundException(Action.class, actionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return actionStatusRepository.findByActionId(pageReq, actionId);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
() -> controllerManagement.getActionForDownloadByTargetAndSoftwareModule(NOT_EXIST_ID, module.getId()),
|
() -> controllerManagement.getActionForDownloadByTargetAndSoftwareModule(NOT_EXIST_ID, module.getId()),
|
||||||
"Target");
|
"Target");
|
||||||
|
|
||||||
|
verifyThrownExceptionBy(() -> controllerManagement.findActionStatusByAction(PAGE, NOT_EXIST_IDL), "Action");
|
||||||
verifyThrownExceptionBy(() -> controllerManagement.hasTargetArtifactAssigned(NOT_EXIST_IDL, "XXX"), "Target");
|
verifyThrownExceptionBy(() -> controllerManagement.hasTargetArtifactAssigned(NOT_EXIST_IDL, "XXX"), "Target");
|
||||||
|
|
||||||
verifyThrownExceptionBy(() -> controllerManagement.hasTargetArtifactAssigned(NOT_EXIST_ID, "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);
|
Action.Status.FINISHED, Action.Status.FINISHED, false);
|
||||||
|
|
||||||
assertThat(actionStatusRepository.count()).isEqualTo(6);
|
assertThat(actionStatusRepository.count()).isEqualTo(6);
|
||||||
assertThat(deploymentManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(6);
|
assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(6);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -161,7 +162,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
Action.Status.FINISHED, Action.Status.FINISHED, false);
|
Action.Status.FINISHED, Action.Status.FINISHED, false);
|
||||||
|
|
||||||
assertThat(actionStatusRepository.count()).isEqualTo(3);
|
assertThat(actionStatusRepository.count()).isEqualTo(3);
|
||||||
assertThat(deploymentManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(3);
|
assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -186,7 +187,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
Action.Status.RUNNING, Action.Status.RUNNING, true);
|
Action.Status.RUNNING, Action.Status.RUNNING, true);
|
||||||
|
|
||||||
assertThat(actionStatusRepository.count()).isEqualTo(1);
|
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);
|
Action.Status.CANCELED, Action.Status.FINISHED, false);
|
||||||
|
|
||||||
assertThat(actionStatusRepository.count()).isEqualTo(7);
|
assertThat(actionStatusRepository.count()).isEqualTo(7);
|
||||||
assertThat(deploymentManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7);
|
assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -241,7 +242,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
Action.Status.CANCELED, Action.Status.CANCELED, false);
|
Action.Status.CANCELED, Action.Status.CANCELED, false);
|
||||||
|
|
||||||
assertThat(actionStatusRepository.count()).isEqualTo(7);
|
assertThat(actionStatusRepository.count()).isEqualTo(7);
|
||||||
assertThat(deploymentManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7);
|
assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -269,7 +270,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
Action.Status.RUNNING, Action.Status.CANCEL_REJECTED, true);
|
Action.Status.RUNNING, Action.Status.CANCEL_REJECTED, true);
|
||||||
|
|
||||||
assertThat(actionStatusRepository.count()).isEqualTo(7);
|
assertThat(actionStatusRepository.count()).isEqualTo(7);
|
||||||
assertThat(deploymentManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7);
|
assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -297,7 +298,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
Action.Status.RUNNING, Action.Status.ERROR, true);
|
Action.Status.RUNNING, Action.Status.ERROR, true);
|
||||||
|
|
||||||
assertThat(actionStatusRepository.count()).isEqualTo(7);
|
assertThat(actionStatusRepository.count()).isEqualTo(7);
|
||||||
assertThat(deploymentManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7);
|
assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Step
|
@Step
|
||||||
@@ -308,8 +309,8 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
assertThat(targetManagement.findTargetByControllerID(TestdataFactory.DEFAULT_CONTROLLER_ID).get()
|
assertThat(targetManagement.findTargetByControllerID(TestdataFactory.DEFAULT_CONTROLLER_ID).get()
|
||||||
.getUpdateStatus()).isEqualTo(TargetUpdateStatus.PENDING);
|
.getUpdateStatus()).isEqualTo(TargetUpdateStatus.PENDING);
|
||||||
|
|
||||||
return deploymentManagement.findActiveActionsByTarget(PAGE, TestdataFactory.DEFAULT_CONTROLLER_ID)
|
return deploymentManagement.findActiveActionsByTarget(PAGE, TestdataFactory.DEFAULT_CONTROLLER_ID).getContent()
|
||||||
.getContent().get(0).getId();
|
.get(0).getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Step
|
@Step
|
||||||
@@ -367,7 +368,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
final Action action = deploymentManagement.findAction(actionId).get();
|
final Action action = deploymentManagement.findAction(actionId).get();
|
||||||
assertThat(action.getStatus()).isEqualTo(expectedActionActionStatus);
|
assertThat(action.getStatus()).isEqualTo(expectedActionActionStatus);
|
||||||
assertThat(action.isActive()).isEqualTo(actionActive);
|
assertThat(action.isActive()).isEqualTo(actionActive);
|
||||||
final List<ActionStatus> actionStatusList = deploymentManagement.findActionStatusByAction(PAGE, actionId)
|
final List<ActionStatus> actionStatusList = controllerManagement.findActionStatusByAction(PAGE, actionId)
|
||||||
.getContent();
|
.getContent();
|
||||||
assertThat(actionStatusList.get(actionStatusList.size() - 1).getStatus()).isEqualTo(expectedActionStatus);
|
assertThat(actionStatusList.get(actionStatusList.size() - 1).getStatus()).isEqualTo(expectedActionStatus);
|
||||||
if (actionActive) {
|
if (actionActive) {
|
||||||
@@ -473,7 +474,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
Action.Status.ERROR, Action.Status.ERROR, false);
|
Action.Status.ERROR, Action.Status.ERROR, false);
|
||||||
|
|
||||||
assertThat(actionStatusRepository.count()).isEqualTo(3);
|
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);
|
Action.Status.FINISHED, Action.Status.FINISHED, false);
|
||||||
|
|
||||||
assertThat(actionStatusRepository.count()).isEqualTo(3);
|
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);
|
.getUpdateStatus()).isEqualTo(TargetUpdateStatus.IN_SYNC);
|
||||||
|
|
||||||
assertThat(actionStatusRepository.count()).isEqualTo(3);
|
assertThat(actionStatusRepository.count()).isEqualTo(3);
|
||||||
assertThat(deploymentManagement.findActionStatusByAction(PAGE, action.getId()).getNumberOfElements())
|
assertThat(controllerManagement.findActionStatusByAction(PAGE, action.getId()).getNumberOfElements())
|
||||||
.isEqualTo(3);
|
.isEqualTo(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -560,7 +561,7 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest {
|
|||||||
|
|
||||||
// however, additional action status has been stored
|
// however, additional action status has been stored
|
||||||
assertThat(actionStatusRepository.findAll(PAGE).getNumberOfElements()).isEqualTo(4);
|
assertThat(actionStatusRepository.findAll(PAGE).getNumberOfElements()).isEqualTo(4);
|
||||||
assertThat(deploymentManagement.findActionStatusByAction(PAGE, action.getId()).getNumberOfElements())
|
assertThat(controllerManagement.findActionStatusByAction(PAGE, action.getId()).getNumberOfElements())
|
||||||
.isEqualTo(4);
|
.isEqualTo(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user