From bf1e171523756b4d4a72c2fc80a74a4808b00ac8 Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Fri, 15 Nov 2024 17:26:25 +0200 Subject: [PATCH] Switch JpaActionStatus to javax.persistence.Convert(er) (#2037) Signed-off-by: Avgustin Marinov --- .../repository/jpa/model/JpaAction.java | 1 - .../repository/jpa/model/JpaActionStatus.java | 19 +-------- .../repository/jpa/management/ActionTest.java | 40 ++++++++++++++++--- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java index 1ce09ac49..0ac3657f8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java @@ -423,5 +423,4 @@ public class JpaAction extends AbstractJpaTenantAwareBaseEntity implements Actio return getMaintenanceWindowStartTime() .map(start -> start.plus(MaintenanceScheduleHelper.convertToISODuration(maintenanceWindowDuration))); } - } \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java index ba1b22f0e..07b879a8b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java @@ -17,6 +17,7 @@ import java.util.Optional; import jakarta.persistence.CollectionTable; import jakarta.persistence.Column; import jakarta.persistence.ConstraintMode; +import jakarta.persistence.Convert; import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -32,9 +33,6 @@ import jakarta.validation.constraints.NotNull; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; -import org.eclipse.persistence.annotations.ConversionValue; -import org.eclipse.persistence.annotations.Convert; -import org.eclipse.persistence.annotations.ObjectTypeConverter; /** * Entity to store the status for a specific action. @@ -64,20 +62,7 @@ public class JpaActionStatus extends AbstractJpaTenantAwareBaseEntity implements private JpaAction action; @Column(name = "status", nullable = false, updatable = false) - @ObjectTypeConverter(name = "status", objectType = Action.Status.class, dataType = Integer.class, conversionValues = { - @ConversionValue(objectValue = "FINISHED", dataValue = "0"), - @ConversionValue(objectValue = "ERROR", dataValue = "1"), - @ConversionValue(objectValue = "WARNING", dataValue = "2"), - @ConversionValue(objectValue = "RUNNING", dataValue = "3"), - @ConversionValue(objectValue = "CANCELED", dataValue = "4"), - @ConversionValue(objectValue = "CANCELING", dataValue = "5"), - @ConversionValue(objectValue = "RETRIEVED", dataValue = "6"), - @ConversionValue(objectValue = "DOWNLOAD", dataValue = "7"), - @ConversionValue(objectValue = "SCHEDULED", dataValue = "8"), - @ConversionValue(objectValue = "CANCEL_REJECTED", dataValue = "9"), - @ConversionValue(objectValue = "DOWNLOADED", dataValue = "10"), - @ConversionValue(objectValue = "WAIT_FOR_CONFIRMATION", dataValue = "11") }) - @Convert("status") + @Convert(converter = JpaAction.StatusConverter.class) @NotNull private Status status; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/ActionTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/ActionTest.java index b6f3c514e..ff33c8d79 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/ActionTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/ActionTest.java @@ -12,6 +12,7 @@ package org.eclipse.hawkbit.repository.jpa.management; import static org.assertj.core.api.Assertions.assertThat; import java.time.Duration; +import java.util.List; import io.qameta.allure.Description; import io.qameta.allure.Feature; @@ -22,15 +23,21 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaAction; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.Status; +import org.eclipse.hawkbit.repository.model.ActionStatus; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.Target; import org.junit.jupiter.api.Test; @Feature("Unit Tests - Repository") @Story("Deployment Management") -public class ActionTest extends AbstractJpaIntegrationTest { +class ActionTest extends AbstractJpaIntegrationTest { + + private Target target; + private DistributionSet distributionSet; @Test @Description("Ensures that timeforced moded switch from soft to forces after defined timeframe.") - public void timeforcedHitNewHasCodeIsGenerated() { + void timeforcedHitNewHasCodeIsGenerated() { // current time + 1 seconds final long sleepTime = 1000; @@ -46,7 +53,7 @@ public class ActionTest extends AbstractJpaIntegrationTest { } @Test - public void testActionTypeConvert() { + void testActionTypeConvert() { final long id = createAction().getId(); for (final ActionType actionType : ActionType.values()) { final JpaAction action = actionRepository @@ -59,7 +66,7 @@ public class ActionTest extends AbstractJpaIntegrationTest { } @Test - public void testStatusConvert() { + void testStatusConvert() { final long id = createAction().getId(); for (final Status status : Status.values()) { final JpaAction action = actionRepository @@ -71,15 +78,36 @@ public class ActionTest extends AbstractJpaIntegrationTest { } } + @Test + void testActionsStatusStatusConvert() { + for (final Status status : Status.values()) { + final long id = createAction().getId(); + controllerManagement.addUpdateActionStatus(entityFactory.actionStatus().create(id).status(status)); + final List actionStatuses = actionRepository + .findById(id).orElseThrow(() -> new IllegalStateException("Action not found")) + .getActionStatus(); + assertThat(actionStatuses).hasSize(1); + assertThat(actionStatuses.stream().filter(as -> as.getStatus() == status).count()).isEqualTo(1); + } + } + private Action createAction() { + if (target == null) { + target = testdataFactory.createTarget("testActionTypeMappingTarget"); + } + if (distributionSet == null) { + distributionSet = testdataFactory.createDistributionSet("testActionTypeMappingDS"); + } + final ActionType[] actionTypes = ActionType.values(); final JpaAction action = new JpaAction(); - action.setTarget(testdataFactory.createTarget("testActionTypeMappingTarget")); - action.setDistributionSet(testdataFactory.createDistributionSet("testActionTypeMappingDS")); + action.setTarget(target); + action.setDistributionSet(distributionSet); action.setActionType(actionTypes[0]); action.setStatus(Status.SCHEDULED); action.setWeight(100); action.setInitiatedBy("none"); + action.setActive(true); return actionRepository.save(action); } }