Switch JpaActionStatus to javax.persistence.Convert(er) (#2037)
Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
This commit is contained in:
@@ -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)));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user