S12 - turned schedule status into enum and some other review comments
All checks were successful
Build, test and publish / verify (push) Successful in 7m6s
All checks were successful
Build, test and publish / verify (push) Successful in 7m6s
This commit is contained in:
@@ -10,6 +10,7 @@ import java.util.Set;
|
||||
import nl.agilecc.agiledancers.model.scheduling.GroupRequirement;
|
||||
import nl.agilecc.agiledancers.model.scheduling.SchedulingFailureKind;
|
||||
import nl.agilecc.agiledancers.model.scheduling.SchedulingInput;
|
||||
import nl.agilecc.agiledancers.model.scheduling.SchedulingPhase;
|
||||
import nl.agilecc.agiledancers.model.scheduling.SchedulingProgress;
|
||||
import nl.agilecc.agiledancers.model.scheduling.SchedulingResult;
|
||||
import nl.agilecc.agiledancers.model.scheduling.SchedulingSummary;
|
||||
@@ -26,11 +27,11 @@ class SchedulingProgressTest {
|
||||
final SchedulingResult result = new OrToolsSchedulingEngine().solve(input, updates::add);
|
||||
assertTrue(result.optimal());
|
||||
assertEquals(
|
||||
List.of("ATTENDANCE", "SPREAD", "VARIETY"),
|
||||
List.of(SchedulingPhase.ATTENDANCE, SchedulingPhase.SPREAD, SchedulingPhase.VARIETY),
|
||||
updates.stream().map(SchedulingProgress::phase).distinct().toList());
|
||||
assertEquals(new SchedulingProgress("ATTENDANCE", false), updates.getFirst());
|
||||
assertTrue(updates.contains(new SchedulingProgress("ATTENDANCE", true)));
|
||||
assertTrue(updates.contains(new SchedulingProgress("VARIETY", true)));
|
||||
assertEquals(new SchedulingProgress(SchedulingPhase.ATTENDANCE, false), updates.getFirst());
|
||||
assertTrue(updates.contains(new SchedulingProgress(SchedulingPhase.ATTENDANCE, true)));
|
||||
assertTrue(updates.contains(new SchedulingProgress(SchedulingPhase.VARIETY, true)));
|
||||
}
|
||||
|
||||
public @Test void noSolutionAndInfeasibleHaveStableDistinctOutcomes() {
|
||||
|
||||
@@ -23,6 +23,7 @@ import nl.agilecc.agiledancers.model.specifications.DanceGroupType;
|
||||
import nl.agilecc.agiledancers.model.specifications.DayPartType;
|
||||
import nl.agilecc.agiledancers.service.model.GroupDetails;
|
||||
import nl.agilecc.agiledancers.service.model.SchedulingRun;
|
||||
import nl.agilecc.agiledancers.service.model.SchedulingState;
|
||||
import nl.agilecc.agiledancers.service.port.SchedulingEngine;
|
||||
import nl.agilecc.agiledancers.solver.OrToolsSchedulingEngine;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -41,7 +42,7 @@ class SchedulingRunsTest {
|
||||
final Runnable unsubscribe = runs.subscribe(updates::set);
|
||||
assertTrue(updates.get().isEmpty());
|
||||
final SchedulingRun started = runs.start(school, show.getId());
|
||||
assertEquals("RUNNING", started.state());
|
||||
assertEquals(SchedulingState.RUNNING, started.state());
|
||||
assertTrue(entered.await(10, TimeUnit.SECONDS));
|
||||
assertEquals(started, runs.status(school, show.getId()));
|
||||
assertThrows(ManagementException.class, () -> runs.start(school, show.getId()));
|
||||
@@ -51,12 +52,12 @@ class SchedulingRunsTest {
|
||||
assertEquals(started, reconnect.get().getFirst());
|
||||
release.countDown();
|
||||
final SchedulingRun finished = await(runs, show);
|
||||
assertEquals("OPTIMAL", finished.state());
|
||||
assertEquals(SchedulingState.OPTIMAL, finished.state());
|
||||
assertEquals(0, finished.summary().performanceSpread());
|
||||
assertTrue(finished.progress().feasible());
|
||||
assertTrue(finished.finishedAt().compareTo(finished.startedAt()) >= 0);
|
||||
assertFalse(show.getDayParts().getFirst().getDanceGroups().isEmpty());
|
||||
assertEquals("RUNNING", updates.get().getFirst().state());
|
||||
assertEquals(SchedulingState.RUNNING, updates.get().getFirst().state());
|
||||
disconnect.run();
|
||||
assertNotEquals(started.runId(), runs.start(school, show.getId()).runId());
|
||||
await(runs, show);
|
||||
@@ -78,9 +79,9 @@ class SchedulingRunsTest {
|
||||
assertTrue(entered.await(10, TimeUnit.SECONDS));
|
||||
schools.touch(first);
|
||||
release.countDown();
|
||||
assertEquals("STALE", await(runs, first).state());
|
||||
assertEquals(SchedulingState.STALE, await(runs, first).state());
|
||||
assertTrue(first.getDayParts().getFirst().getDanceGroups().isEmpty());
|
||||
assertEquals("OPTIMAL", await(runs, second).state());
|
||||
assertEquals(SchedulingState.OPTIMAL, await(runs, second).state());
|
||||
} finally {
|
||||
release.countDown();
|
||||
runs.close();
|
||||
@@ -112,7 +113,7 @@ class SchedulingRunsTest {
|
||||
try {
|
||||
runs.start(school, show.getId());
|
||||
final SchedulingRun failed = await(runs, show);
|
||||
assertNotEquals("RUNNING", failed.state());
|
||||
assertNotEquals(SchedulingState.RUNNING, failed.state());
|
||||
assertTrue(failed.message().contains("behouden"));
|
||||
assertTrue(show.getDayParts().getFirst().getDanceGroups().isEmpty());
|
||||
schools.endScheduling(schools.beginScheduling(school, show.getId()).showId());
|
||||
@@ -127,10 +128,11 @@ class SchedulingRunsTest {
|
||||
false, new OrToolsSchedulingEngine().solve(input).assignments());
|
||||
final var runs = new SchedulingRuns(schools, engine);
|
||||
runs.start(school, show.getId());
|
||||
assertEquals("VALID", await(runs, show).state());
|
||||
assertEquals(SchedulingState.VALID, await(runs, show).state());
|
||||
runs.close();
|
||||
assertThrows(java.util.concurrent.RejectedExecutionException.class, () -> runs.start(school, show.getId()));
|
||||
assertEquals("SOLVER_FAILED", runs.status(school, show.getId()).state());
|
||||
assertEquals(
|
||||
SchedulingState.SOLVER_FAILED, runs.status(school, show.getId()).state());
|
||||
schools.endScheduling(schools.beginScheduling(school, show.getId()).showId());
|
||||
}
|
||||
|
||||
@@ -170,11 +172,11 @@ class SchedulingRunsTest {
|
||||
private SchedulingRun await(final SchedulingRuns runs, final Show show) {
|
||||
final long deadline = System.nanoTime() + TimeUnit.SECONDS.toNanos(10);
|
||||
SchedulingRun status = runs.status(school, show.getId());
|
||||
while (status.state().equals("RUNNING") && System.nanoTime() < deadline) {
|
||||
while (status.state().equals(SchedulingState.RUNNING) && System.nanoTime() < deadline) {
|
||||
LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(10));
|
||||
status = runs.status(school, show.getId());
|
||||
}
|
||||
assertNotEquals("RUNNING", status.state());
|
||||
assertNotEquals(SchedulingState.RUNNING, status.state());
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user