Skip to content

Commit

Permalink
Issue 26400 generate runningid when scheduling (#26404)
Browse files Browse the repository at this point in the history
* #26400 generate runningid when scheduling Experiment

* #26400 IT

* #26400 rewrite IT
  • Loading branch information
dsilvam authored and manuelrojas committed Oct 13, 2023
1 parent f018b4e commit f6cffa4
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 28 deletions.
Expand Up @@ -5,6 +5,7 @@
import static com.dotcms.util.CollectionsUtils.map;
import static com.dotcms.variant.VariantAPI.DEFAULT_VARIANT;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertNotSame;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
Expand Down Expand Up @@ -206,10 +207,10 @@ public void createRunningIdWhenExperimentIsTurnToRunning()
public void createRunningIdWithStartScheduled()
throws DotDataException, DotSecurityException {
final Experiment experiment = new ExperimentDataGen()
.status(Status.SCHEDULED)
.status(Status.DRAFT)
.scheduling(Scheduling.builder()
.startDate(Instant.now())
.endDate(Instant.now().plus(2, ChronoUnit.DAYS))
.endDate(Instant.now().plus(10, ChronoUnit.DAYS))
.build())
.nextPersisted();

Expand All @@ -221,8 +222,11 @@ public void createRunningIdWithStartScheduled()

assertFalse(experimentFromDataBase_1.runningIds().iterator().hasNext());

final Experiment scheduledExperiment = APILocator.getExperimentsAPI()
.start(experiment.id().get(), APILocator.systemUser());

final Experiment experimentStarted = APILocator.getExperimentsAPI()
.startScheduled(experiment.id().get(), APILocator.systemUser());
.startScheduled(scheduledExperiment.id().get(), APILocator.systemUser());

try {
assertNotNull(experimentStarted.runningIds());
Expand Down Expand Up @@ -307,43 +311,50 @@ public void restartExperimentMustGenerateTwoRunningIds()
public void restartExperimentUsingTheStartScheduled()
throws DotDataException, DotSecurityException {
final Experiment experiment = new ExperimentDataGen()
.status(Status.SCHEDULED)
.status(Status.DRAFT)
.scheduling(Scheduling.builder()
.startDate(Instant.now())
.endDate(Instant.now().plus(2, ChronoUnit.DAYS))
.endDate(Instant.now().plus(10, ChronoUnit.DAYS))
.build())
.nextPersisted();

final Experiment experimentStarted = APILocator.getExperimentsAPI()
.startScheduled(experiment.id().get(), APILocator.systemUser());
final Experiment scheduledExperiment = APILocator.getExperimentsAPI()
.start(experiment.id().get(), APILocator.systemUser());

final Experiment experimentToRestart = Experiment.builder().from(experimentStarted)
.status(Status.SCHEDULED)
.scheduling(Scheduling.builder()
.startDate(Instant.now())
.endDate(Instant.now().plus(2, ChronoUnit.DAYS))
.build())
.build();
final Experiment startedExperiment = APILocator.getExperimentsAPI()
.startScheduled(scheduledExperiment.id().get(), APILocator.systemUser());

try {
FactoryLocator.getExperimentsFactory().save(experimentToRestart);
final Experiment endedExperiment = APILocator.getExperimentsAPI()
.end(startedExperiment.id().get(), APILocator.systemUser());

APILocator.getExperimentsAPI()
.startScheduled(experimentToRestart.id().get(), APILocator.systemUser());
final Experiment experimentToRestart = APILocator.getExperimentsAPI()
.save(
Experiment.builder().from(endedExperiment)
.status(Status.DRAFT)
.scheduling(Scheduling.builder()
.startDate(Instant.now())
.endDate(Instant.now().plus(10, ChronoUnit.DAYS))
.build())
.build(), APILocator.systemUser());

final Experiment experimentAfterReStart = APILocator.getExperimentsAPI()
.find(experimentToRestart.id().get(), APILocator.systemUser())
.orElseThrow(() -> new AssertionError("Experiment not found"));
final Experiment rescheduledExperiment = APILocator.getExperimentsAPI()
.start(experimentToRestart.id().get(), APILocator.systemUser());

assertEquals(2, experimentAfterReStart.runningIds().size());
final Experiment restartedExperiment = APILocator.getExperimentsAPI()
.startScheduled(rescheduledExperiment.id().get(), APILocator.systemUser());

assertTrue(experimentAfterReStart.runningIds().getAll().stream()
try {

assertEquals(2, restartedExperiment.runningIds().size());

assertTrue(restartedExperiment.runningIds().getAll().stream()
.anyMatch(runningId -> runningId.endDate() != null));

assertTrue(experimentAfterReStart.runningIds().getAll().stream()
assertTrue(restartedExperiment.runningIds().getAll().stream()
.anyMatch(runningId -> runningId.endDate() == null));

assertTrue(experimentAfterReStart.runningIds().get(0).id() != experimentAfterReStart.runningIds().get(1).id());
assertNotSame(restartedExperiment.runningIds().get(0).id(),
restartedExperiment.runningIds().get(1).id());
} finally {
APILocator.getExperimentsAPI().end(experimentToRestart.id().get(), APILocator.systemUser());
}
Expand Down Expand Up @@ -8903,5 +8914,37 @@ public void testExperimentSerialization() throws IOException, ClassNotFoundExcep
}

}

/**
* Method to test: {@link ExperimentsAPIImpl#start(String, User)}
* When: Scheduling an Experiment
* Should: Generate a running id
*/
@Test
public void scheduleExperiment_shouldGenerateRunningId() throws DotDataException, DotSecurityException {
final Instant startDate = Instant.now().plus(1, ChronoUnit.DAYS);
final Experiment experiment = new ExperimentDataGen()
.scheduling(Scheduling.builder().startDate(startDate).build())
.nextPersisted();

APILocator.getExperimentsAPI().start(experiment.id().orElseThrow(), APILocator.systemUser());

try {
final Experiment experimentAfterScheduled = APILocator.getExperimentsAPI()
.find(experiment.id().orElseThrow(), APILocator.systemUser())
.orElseThrow();

assertFalse(experimentAfterScheduled.runningIds().getAll().isEmpty());

} finally {
final Experiment experimentFromDB = APILocator.getExperimentsAPI()
.find(experiment.getIdentifier(), APILocator.systemUser())
.orElseThrow();

if (experimentFromDB.status() == Status.RUNNING) {
APILocator.getExperimentsAPI().end(experiment.getIdentifier(), APILocator.systemUser());
}
}
}
}

Expand Up @@ -588,8 +588,8 @@ public Experiment start(String experimentId, User user)
final Experiment experimentToSave = persistedExperiment.withScheduling(scheduling)
.withStatus(SCHEDULED);
validateNoConflictsWithScheduledExperiments(experimentToSave, user);
toReturn = save(experimentToSave.withScheduling(scheduling).withStatus(SCHEDULED),
user);
toReturn = save(experimentToSave.withScheduling(scheduling).withStatus(SCHEDULED).
withRunningIds(getRunningIds(experimentToSave)), user);
}

return toReturn;
Expand Down Expand Up @@ -814,7 +814,7 @@ public Experiment startScheduled(String experimentId, User user)
final Experiment readyToStart = save(Experiment.builder().from(persistedExperiment)
.status(RUNNING).build(), user);

return innerStart(readyToStart, user, true);
return innerStart(readyToStart, user, false);
}

private Experiment innerStart(final Experiment persistedExperiment, final User user,
Expand Down

0 comments on commit f6cffa4

Please sign in to comment.