Switch JpaActionStatus to javax.persistence.Convert(er) (#2037)

Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
This commit is contained in:
Avgustin Marinov
2024-11-15 17:26:25 +02:00
committed by GitHub
parent b4848f9875
commit bf1e171523
3 changed files with 36 additions and 24 deletions

View File

@@ -423,5 +423,4 @@ public class JpaAction extends AbstractJpaTenantAwareBaseEntity implements Actio
return getMaintenanceWindowStartTime() return getMaintenanceWindowStartTime()
.map(start -> start.plus(MaintenanceScheduleHelper.convertToISODuration(maintenanceWindowDuration))); .map(start -> start.plus(MaintenanceScheduleHelper.convertToISODuration(maintenanceWindowDuration)));
} }
} }

View File

@@ -17,6 +17,7 @@ import java.util.Optional;
import jakarta.persistence.CollectionTable; import jakarta.persistence.CollectionTable;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.ConstraintMode; import jakarta.persistence.ConstraintMode;
import jakarta.persistence.Convert;
import jakarta.persistence.ElementCollection; import jakarta.persistence.ElementCollection;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.FetchType; 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;
import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.Action.Status;
import org.eclipse.hawkbit.repository.model.ActionStatus; 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. * Entity to store the status for a specific action.
@@ -64,20 +62,7 @@ public class JpaActionStatus extends AbstractJpaTenantAwareBaseEntity implements
private JpaAction action; private JpaAction action;
@Column(name = "status", nullable = false, updatable = false) @Column(name = "status", nullable = false, updatable = false)
@ObjectTypeConverter(name = "status", objectType = Action.Status.class, dataType = Integer.class, conversionValues = { @Convert(converter = JpaAction.StatusConverter.class)
@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")
@NotNull @NotNull
private Status status; private Status status;

View File

@@ -12,6 +12,7 @@ package org.eclipse.hawkbit.repository.jpa.management;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import java.time.Duration; import java.time.Duration;
import java.util.List;
import io.qameta.allure.Description; import io.qameta.allure.Description;
import io.qameta.allure.Feature; 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;
import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.ActionType;
import org.eclipse.hawkbit.repository.model.Action.Status; 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; import org.junit.jupiter.api.Test;
@Feature("Unit Tests - Repository") @Feature("Unit Tests - Repository")
@Story("Deployment Management") @Story("Deployment Management")
public class ActionTest extends AbstractJpaIntegrationTest { class ActionTest extends AbstractJpaIntegrationTest {
private Target target;
private DistributionSet distributionSet;
@Test @Test
@Description("Ensures that timeforced moded switch from soft to forces after defined timeframe.") @Description("Ensures that timeforced moded switch from soft to forces after defined timeframe.")
public void timeforcedHitNewHasCodeIsGenerated() { void timeforcedHitNewHasCodeIsGenerated() {
// current time + 1 seconds // current time + 1 seconds
final long sleepTime = 1000; final long sleepTime = 1000;
@@ -46,7 +53,7 @@ public class ActionTest extends AbstractJpaIntegrationTest {
} }
@Test @Test
public void testActionTypeConvert() { void testActionTypeConvert() {
final long id = createAction().getId(); final long id = createAction().getId();
for (final ActionType actionType : ActionType.values()) { for (final ActionType actionType : ActionType.values()) {
final JpaAction action = actionRepository final JpaAction action = actionRepository
@@ -59,7 +66,7 @@ public class ActionTest extends AbstractJpaIntegrationTest {
} }
@Test @Test
public void testStatusConvert() { void testStatusConvert() {
final long id = createAction().getId(); final long id = createAction().getId();
for (final Status status : Status.values()) { for (final Status status : Status.values()) {
final JpaAction action = actionRepository 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<ActionStatus> 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() { private Action createAction() {
if (target == null) {
target = testdataFactory.createTarget("testActionTypeMappingTarget");
}
if (distributionSet == null) {
distributionSet = testdataFactory.createDistributionSet("testActionTypeMappingDS");
}
final ActionType[] actionTypes = ActionType.values(); final ActionType[] actionTypes = ActionType.values();
final JpaAction action = new JpaAction(); final JpaAction action = new JpaAction();
action.setTarget(testdataFactory.createTarget("testActionTypeMappingTarget")); action.setTarget(target);
action.setDistributionSet(testdataFactory.createDistributionSet("testActionTypeMappingDS")); action.setDistributionSet(distributionSet);
action.setActionType(actionTypes[0]); action.setActionType(actionTypes[0]);
action.setStatus(Status.SCHEDULED); action.setStatus(Status.SCHEDULED);
action.setWeight(100); action.setWeight(100);
action.setInitiatedBy("none"); action.setInitiatedBy("none");
action.setActive(true);
return actionRepository.save(action); return actionRepository.save(action);
} }
} }